【问题标题】:Laravel filtering parts of a resource route by declaring it twiceLaravel 通过声明两次来过滤资源路由的一部分
【发布时间】:2014-07-26 14:04:44
【问题描述】:

在我的 Laravel 应用程序中,我有一个资源路由,我想根据过滤器控制对单个路由的访问。为此,我只使用“视图”路由声明资源,然后在嵌套过滤组中仅使用“编辑/创建”路由再次声明它。过滤器是一种自定义过滤器,用于检查登录用户的能力。

我的路线如下所示:

Route::group(['before' => 'auth'], function()
{
    $edit_routes = ['create', 'store', 'destroy', 'edit', 'update'];

    Route::resource('things', 'ThingsController', ['except' => $edit_routes]);

    // We'll filter the routes that involve editing resources
    Route::group(['before' => 'edit_resource'], function() use ($edit_routes) 
    {
        Route::resource('things', 'ThingsController', ['only' => $edit_routes]);
    });
}

这是正确的吗?尽管没有抛出任何错误,但它似乎不起作用。当我访问嵌套过滤器中的路由(例如事物/创建)时,我只会得到一个空白页面。

有没有更好的方法来实现这一点?

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    这是正确的吗?

    没有

    有没有更好的方法来实现这一点?

    是的。 Here is a great blog post by Phil Sturgeon that explains why you should just define each route manually.

    如果你真的想继续使用资源控制器,你可以像这样在控制器构造函数中应用edit_resource

    Route::resource('things', 'ThingsController', ['before' => 'auth']);
    

    然后在你的资源控制器中

    public function __construct()
    {
        $this->beforeFilter('edit_resource', array('only' => ['create', 'store', 'destroy', 'edit', 'update']);
    }
    

    【讨论】:

    • 感谢您的澄清
    • 虽然我已经通过将beforeFilter 方法放在控制器的构造中来遵循您的回答,但它似乎不起作用(没有错误,但过滤器被忽略)。 on 键是否适用于控制器的方法?我以为它只适用于 REST 方法。例如'on' => ['POST']...
    • 是控制器方法。
    • 你可以在这里阅读更多信息:laravel.com/docs/controllers#controller-filters
    • 啊,好像应该是'only' => ['create', 'update'...]而不是on
    猜你喜欢
    • 2016-02-14
    • 2015-02-19
    • 2015-01-11
    • 2014-07-17
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    相关资源
    最近更新 更多