先试下出个页面 - 控制器

  • 作者:KK

  • 发表日期:2016.12.8


controllers目录是放控制器的,这里默认有了个SiteController.php,这个文件里也定义了一个叫SiteController的类,继承了yii\web\Controller,一般来说这里一个控制器就是一个文件

  • 重要知识点:在Yii2里用一种叫psr-4的方案去加载一个类,要求文件名的前缀和类名要一致,所以如果类名叫A,那文件名必然叫A.php,而且大小写敏感

  • 对控制器的称呼

    控制器都有个Controller后缀,所以咱们要再加个User控制器那就是UserController

    我以后就简称User控制器这样了哦


访问控制器方法(action)

拿Site控制器试一下,它默认有了一些代码,比如最底下有个叫actionAbout的方法

要运行这个方法的网址是:http://xxx.com/index.php?r=site/about,关键词:site/about,这里就是指site控制器和about方法,别管那么多,赶紧复制修改一下xxx.com部分访问一下

结果就看到了个about页面

为什么不叫actionAbout方法?因为一个控制器方法要暴露给外面的WEB请求访问,那它的方法名前面必须加上action前缀,然后再用大写开头驼峰命名法来说明这个方法

比如site/qq那就是运行actionQq这个方法

如果是2个单词以上的话就要用中划线隔开了,site/user-list就是运行actionUserList

  • 重要知识点:在Yii2里,控制器的方法扮演了一个叫action的角色,比如说各种教程描述时说运行about这个action,那你暂时可以认为是运行actionAbout这个方法

自己加个Action

直接在site控制器里加个叫test的action吧,里面随便echo点东西,代码就是这样:

public function actionTest(){
	echo 'Hello World!';
}

访问/index.php?r=site/test就能看到这个字符串输出了


初步了解它的底层响应处理,Action主要做return

如果你这样写代码会输出字母 ab :

public function actionTest(){
	echo 'a';
	return 'b';
}

echo会输出,然后return给框架底层的时候,底层也会把返回的信息进行自动echo

基于Yii2开发的时候,一般情况下都我们不会在action里执行echo,而是把需要输出的数据return框架,比如return '<a href="/">link</a>';


重要知识点:控制器ID和actionID

Site控制器的ID是全小写的site

UserManage控制器的ID是user-manage

发现规律了吧,先转换成小写,再用中划线隔开单词

其实action的ID也是,actionAbout这个的actionID就是about,actionUserList的actionID就是user-list

目前使用的地方就是网址上的路由,/index.php?r=控制器ID/actionID

顺带一提,这个网址的写法 是可以配置修改的,比如改成/shop/site/about.html来运行site控制器的about这个action都可以,在后面的实现伪静态里会提到

控制器ID和actionID的用处还有其它地方,别小看它,否则你肯定吃亏,到时候看不懂一些教程,听不懂人家说的话


自己加个控制器

创建个test控制器吧,然后再来个test方法,代码如下:

namespace app\controllers; //控制器默认就在这个命名空间

class TestController extends \yii\web\Controller{
	public function actionTest(){
		return 'yii test';
	}
}

然后根据上面学到的知识,试试访问这个test方法吧,访问不了请在文章下面提问