本节包含以下方面的内容
控制器(Control)是html' target='_blank'>应用程序中最关键的部分之一,它决定了如何处理传递进来的请求(Request),以及生成相应的响应(Response)。
大部分的控制器都会处理一个Http的请求,然后返回Html或者Json或者Xml格式的数据作为响应。
1、基本概念
控制器文件一般在应用程序的controllers目录下面,文件命名规则为XXXController.php,其中XXX可以为任意的名称,后面的Controller是固定格式,不能少一个单词。
一个基本的控制器的定义要从yiiwebController继承,如
namespace appcontrollers;use yiiwebController;class SiteController extends Controller{ public function actionIndex() { // will render view from 'views/site/index.php' return $this->render('index'); } public function actionTest() { // will just print 'test' to the browser return 'test'; }}
一般来说控制器里面定义的动作都是actionSomething格式的公共的方法。输出的数据可以是一个字符串或者yiiwebResponse的实例。
动作输出的结果将会由 response组件处理并转换成不同的数据格式如JSON等。默认情况下是没有对动作的执行结果进行处理的。
2、路由
每个控制器里面的动作都有一个相对应的路由,在上面的例子中actionIndex有一个对应的site/index路由,actionTest对应的路由是site/test。在这个路由中site为控制器的id,test为动作的id。
一般情况下可以通过这个格式的URL来访问控制器和动作。http://example.com/?r=controller/action。当然你可以完全自定义url的格式(URL Management.)。
如果控制器是在一个模块里面,那么对应的路由格式为module/controller/action。
控制器还可以存在于应用程序或者模块的控制器目录下面的子目录里。这种路由的格式前面就需要加上相应的目录名称。例如在controllers/admin下面有个UserController,那么动作actionIndex相应的路由为admin/user/index。admin/user为控制器的Id.
如果模块或者控制器或者动作都没有找到,Yii将会返回一个'not found' 页面,并且返回的Http代码为404。
注意:
如果模块名称或者控制器名称或者动作名称是用的骆驼格式的命名写法,那么路由里面的每个大写单词之间都要用“-”来连接。如
DateTimeController::actionFastForward相应的路由为date-time/fast-forward。
1、默认路由
如果一个URl没有指定路由,如http://www.yiifans.com,那么Yii将会使用默认的路由。
Yii在应用程序里面定义了默认的路由。默认的路由为site由yiiwebApplication:: $defaultRoute定义,即控制器SiteController将会被使用。
有默认的路由也就会有默认的动作了。每个控制器都有一个默认的动作。如果在URL中没有指定动作的话,那么将会调用默认的动作。
默认的动作名为index,在yiiaseController:: $defaultAction中定义。
如http://www.yiifans.com/?r=site,只指定了路由为site,那么将会使用默认的动作index,即将会调用SiteController里面的actionIndex方法
3、动作参数
就像上面提到的一样,一个简单的动作就是一个以actionXXX格式命名的公开的方法。那么动作如何从Http的请求中获取想要的参数呢?
1、动作中定义参数
在定义动作的时候直接定义参数。这个参数的值会直接从$_GET里面获取对应的值。也就是说动作里面定义的参数只能从$_GET里面获取值。
namespace appcontrollers;use yiiwebController;class BlogController extends Controller{ public function actionView($id, $version = null) { $post = Post::findOne($id); $text = $post->text; if ($version) { $text = $post->getHistory($version); } return $this->render('view', [ 'post' => $post, 'text' => $text, ]); }}
如上所示动作view定义了两个参数$id和$version。其中$version的默认值为null。
我们可以通过http://www.yiifans.com/?r=blog/view&id=42或者http://www.yiifans.com/?r=blog/view&id=42&version=3来访问。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答