Php 在Laravel4中,如何在控制器中的所有方法之前运行代码?

Php 在Laravel4中,如何在控制器中的所有方法之前运行代码?,php,laravel,controller,laravel-4,before-filter,Php,Laravel,Controller,Laravel 4,Before Filter,我有一个带有REST方法(index..create..store..)的Content controller,我想在这些方法运行之前运行一些代码 我试图做的是使用一些与Content controller中的所有方法相关的数据为我的布局设置var: $this->layout->myvar = 'some-data'; 我试着这样做: class ContentController extends BaseController { function __construct

我有一个带有REST方法(index..create..store..)的Content controller,我想在这些方法运行之前运行一些代码

我试图做的是使用一些与Content controller中的所有方法相关的数据为我的布局设置var:

$this->layout->myvar = 'some-data';
我试着这样做:

class ContentController extends BaseController {
    function __construct() {
        $this->layout->myvar= 'some-data';
    }
..
但它似乎不起作用。 我收到“尝试分配非对象属性”错误。

Laravel 5.1+ 这已被弃用,取而代之的是中间件

拉维尔4号 您可以将
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');
        });
    }
}

尝试在app/routes.php中共享

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


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

谢谢,但当我尝试设置$this->layout->myvar=…时,仍然会出现错误“尝试分配非对象的属性”…我会遇到类似错误“使用()调用非对象的成员函数”-看起来$this->布局可能不是对象,但当我在控制器的其他函数中使用它时,一切都很好。@Brightside OK。如果它在您的操作中起作用,那么可能是由于在基本控制器的某个点设置了布局。尝试将
beforeFilter
功能替换为
afterFilter
,看看是否适合您。当然,后过滤器将在操作之后运行。谢谢!是的,在我的基本控制器中设置布局。:)<代码>父项::u构造()??
View::share('name', 'Steve');