菜鸟CK 2016-07-03 13:24:47 14230次浏览 3条评论 12 6 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 />";
    }
    ?>
    

    输出:

打印data

模型

  • 模型规则

    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操作,输出:

打印article对象

查一条数据试试
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>';
	}
}

数据查询到了

执行结果

觉得很赞
您需要登录后才可以评论。登录 | 立即注册