如何在Laravel 4中的控制器内部所有方法之前运行代码?

时间:2014-05-10 19:21:22

标签: php laravel controller laravel-4 before-filter

我有带REST方法的内容控制器(index..create..store ..),我希望在运行任何这些方法之前运行一些代码。

我想要做的是为我的布局设置var,其中一些数据与内容控制器中的所有方法相关:

$this->layout->myvar = 'some-data';

我试着这样做:

class ContentController extends BaseController {
    function __construct() {
        $this->layout->myvar= 'some-data';
    }
..

但它似乎不起作用。 我得到"尝试分配非对象的属性"错误。

2 个答案:

答案 0 :(得分:7)

在Laravel 5之前,您可以像这样设置beforeFilter

class ContentController extends BaseController {
    function __construct() {
        // this function will run before every action in the controller
        $this->beforeFilter(function()
        {
            // this will make the variable $myvar available in your view
            $this->layout->with('myvar', 'some-data');
        });
    }
}

...这在Laravel 5中已被弃用,转而支持Middleware。

答案 1 :(得分:4)

尝试在app / routes.php中分享

View::share('variable_name', 'value');

例如:

View::share('name', 'Steve');

将在所有视图中共享变量及其值