您的位置:首页 > 编程语言 > PHP开发

Yii2实用基础学习笔记(一):模型、视图与控制器

2016-07-03 00:00 971 查看
摘要: Yii2实用基础学习笔记系列

控制器

控制器、操作与访问规则

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>';
}
}


数据查询到了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: