我有一个基本控制器,所有其他控制器都会扩展它。 我想做一些主题和验证,并在其Before函数中加载小部件。
我知道我可以使用Routes过滤器来处理这个问题,但我不想将我的代码放在路由器中我希望每个控制器操作首先执行“Before function”然后执行这个Base控制器的“After function”,如Laravel 3。
class FrontController extends \BaseController {
protected $layout = 'home.index';
public function __construct() {
}
public function before() {
// Do some theme and validation
}
public function __call($method, $parameters) {
return Response::abort('404');
}
更新:我正在寻找一种方法,例如我可以根据页面配置更改主题或在主控制器完成其功能后加载侧边栏小部件...因为我想要访问$ this。 / p>
答案 0 :(得分:8)
根据documentation,您可以通过两种方式在控制器中定义方法之前和之后。
使用过滤器名称:
$this->beforeFilter('auth');
$this->afterFilter('something_else');
或关闭:
$this->beforeFilter(function() {
// code
});
这些将放在您的基本控制器的__construct
方法中。
这是一个完整的例子:
class BaseController extends Controller {
public function __construct()
{
// Always run csrf protection before the request when posting
$this->beforeFilter('csrf', array('on' => 'post'));
// Here's something that happens after the request
$this->afterFilter(function() {
// something
});
}
/**
* Setup the layout used by the controller.
*
* @return void
*/
protected function setupLayout()
{
if ( ! is_null($this->layout))
{
$this->layout = View::make($this->layout);
}
}
}