先试下出个页面 - 控制器 ¶
作者: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方法吧,访问不了请在文章下面提问