Laravel 4之控制器
控制器
通常Laravel控制器文件放在app/controllers/
目录下。该目录已被Composer自动加载。控制器名称可以任意取,但一般以Controller
为后缀,然后继承BaseController
或Controller
类,BaseController
通常包括一些公用的控制器逻辑。
<?php
// app/controllers/ArticleController.php
classArticleControllerextendsBaseController
{
publicfunction showIndex()
{
returnView::make('index');
}
publicfunction showSingle($articleId)
{
returnView::make('single');
}
}
在路由中调用控制器
// app/routes.php
Route::get('index','ArticleController@showIndex');
控制器中使用命名空间
// app/routes.php
Route::get('index','Namespace/ArticleController@showIndex');
在控制器路由中指定名称
Route::get('foo', array('uses'=>'FooController@method',
'as'=>'name'));
使用URL::action
方法获取一个控制器操作的链接
$url = URL::action('FooController@method');
使用currentRouteAction
方法获取当前控制器操作的名称
$action =Route::currentRouteAction();
控制器过滤器
Route::get('profile', array('before'=>'auth',
'uses'=>'UserController@showProfile'));
在控制器内部定义过滤器
classUserControllerextendsBaseController{
publicfunction __construct()
{
$this->beforeFilter('auth');
$this->beforeFilter('csrf', array('on'=>'post'));
$this->afterFilter('log', array('only'=>
array('fooAction','barAction')));
}
}
RESTful 控制器
使用简单的REST命名规范,轻松定义单个路由去处理控制器的每个操作。避免为每个控制器动作绑定路由。定义一个 RESTful 控制器
Route::controller('article','ArticleController');
ArticleController类中的方法以HTTP动作为前缀,如
<?php
// app/controllers/Article.php
classArticleextendsBaseController
{
publicfunction getCreate()
{
returnView::make('create');
}
publicfunction postCreate()
{
// Handle the creation form.
}
}
如果你的控制器操作名称包含多个单词,你可以使用 "破折号" 语法来获得URI。例如,下面UserController
控制器中的这个操作会用来应答users/admin-profile
URI:
publicfunction getAdminProfile(){}