Yii2实用基础学习笔记(一):模型、视图与控制器 [ 2.0 版本 ]
控制器
控制器、操作与访问规则
1 .控制器以【控制器名+Controller】命名在@app\controllers目录下,继承自yii\web\Controller。
2 .路由格式是【操作ID/操作ID】,控制器ID test-user相当于类名TestUserController。
3 .操作以 action + 方法名构成,操作ID say-hello相当于方法名actionSayHello。
在@app\controllers目录下建立Test控制器:
<?php
namespace app\controllers; //定义命名空间
use yii\web\Controller; //引入命名空间
class TestController extends Controller{
public function actionIndex(){
echo 'hello word!';
}
}
在浏览器访问http://localhost/yii2/web/index.php?r=test 输出hello word!
控制器的一些方法
1 .重定向
$this->redirect([‘test/index’])
2 .回到首页$this->goHome()
3 .返回$this->goBack()
4 .刷新当前页面$this->refresh()
5 .渲染视图$this->render
(视图,注入视图数组数据)
6 .渲染没有layout的视图$this->renderPartial
(视图,注入视图数组数据)
7 .响应Ajax请求,饿哦有layout的视图$this->renderAjax
(视图,注入视图数组数据)
修改Test控制器的index操作
<?php
namespace app\controllers; //定义命名空间
use yii\web\Controller; //引入命名空间
class TestController extends Controller{
public function actionIndex(){
//echo 'hello word!';
//重定向(这儿循环重定向了)
//return $this->redirect(['test/index']);
//回到首页
//return $this->goHome();
//返回
//return $this->goBack();
//刷新(这儿循环重定向了)
//return $this->refresh();
}
}
视图
视图规则
1 .视图在views目录下,一个控制器ID对应一个视图目录,TestControler的控制器ID是test,将对应@app/views/test视图目录,视图由yii\web\View组件管理。
在TestController中调用return $this->render('index',['data'=>[1,2,3]]);
在@app\views\test\index.php中获取Test控制器注入的值
<?php foreach ($data as $key => $value) { echo $value."<br />"; } ?>
输出:
模型
模型规则
1 .模型在@app\models目录下模型类名与模型文件名同名,Model一般继承与两个yii2的类,一个是关联到数据库的yii\db\ActiveRecord,这个时候如果类名(文件名)不能与表直接对应,需要通过tableName()公共静态方法显式的指定表名,另一个是继承自yii\base\Model类。
2 .简单操作
创建一个测试库yii2basic:
CREATE DATABASE yii2basic; USEyii2basic;
创建一个文章表
DROP TABLE IF EXISTS `article`; CREATE TABLE `article`( `id` int unsigned not null auto_increment, `title` varchar(100) not null default '' comment '标题', `desc` varchar(500) not null default '' comment '描述', `content` text not null comment '内容', `click` int(8) unsigned not null default 100 comment '点击数', `status` tinyint(1) not null default 1 comment '状态', `pubdate` int(10) unsigned not null default 0 comment '录入时间戳', primary key(`id`) )ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='文章表' AUTO_INCREMENT=1;
插入测试数据:
NSERT INTO `yii2basic`.`article`(`title`,`desc`,`content`) VALUES('测试标题1','测试描述1','测试内容1'); INSERT INTO `yii2basic`.`article`(`title`,`desc`,`content`) VALUES('测试标题2','测试描述2','测试内容2');
配置数据库信息在@app\config目录下的db.php:
<?php return [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=yii2basic', 'username' => 'root', 'password' => '123456', 'charset' => 'utf8', ];
在@app\models目录下创建Article.php,类Article继承自ActiveRecord,类名与表明一样,所以不用显式的指定表名
<?php
namespace app\models;
use yii\db\ActiveRecord;
class Article extends ActiveRecord{
}
在@app\controllers目录的Test控制器中我们引入Article的命名空间
use app\models\Article;
在index操作中实例化:
$article = new Article(); echo '<pre>'; var_dump($article); echo '</pre>';
访问test/index操作,输出:
查一条数据试试
Test控制器的index操作中我们查询一条数据,当然,我们也可以不用use命名空间,但是每次都要指定命名空间全路径,有点麻烦:
<?php
namespace app\controllers; //定义命名空间
use yii\web\Controller; //引入命名空间
class TestController extends Controller{
public function actionIndex(){
$article = new \app\models\Article();
$article = \app\models\Article::findOne(1);
echo '<pre>';
var_dump($article);
echo '</pre>';
}
}
数据查询到了
菜鸟CK 北京
最后登录:2020-02-24
在线时长:24小时15分
- 粉丝103
- 金钱1110
- 威望110
- 积分2450
共 3 条评论
为什么图片出不来呢?
可能是前几天社区在做这方面的更改,之前上传的都没有了
@菜鸟CK 有可能是网络原因吧。这会又好像部分图片出来了。
@moka同学 笔记一二三里面的都没有了的,应该会恢复的
吾问无为谓我我我我
hahahaha
哈哈哈,哈哈哈