Php 优先选择Laravel 4条路线

Php 优先选择Laravel 4条路线,php,laravel,laravel-4,routing,Php,Laravel,Laravel 4,Routing,我有这样的路线: Route::group(array('before' => 'installed'), function() { Route::group(array('before' => 'auth_admin', 'prefix' => 'admin'), function() { Route::group(array('prefix' => 'gag'), function() { Route::g

我有这样的路线:

Route::group(array('before' => 'installed'), function() {

    Route::group(array('before' => 'auth_admin', 'prefix' => 'admin'), function()
    {

        Route::group(array('prefix' => 'gag'), function() {

            Route::get('/', 'Admin\\GagController@index');
            Route::get('delete/{id}','Admin\\GagController@delete');

        });

    });

});
我需要防止用户删除我的
demo
应用程序上的内容。因此,我在实际路线之前添加了以下代码

if(App::environment() === 'demo')
{
     Route::get('admin/gag/delete/{id}', function() {
          die("You can't delete anything on demo application.");
     });
}

//Actual routes are at the below.
但是,当
Route::get('delete/{id}','Admin'时,它不起作用\\GagController@delete');在那里。不知何故,拉威尔忽略了我的if块,优先考虑这条路线。(尽管如果块位于顶部。)

看起来像是
routes.php
在解析路由之后解析我的if块

我怎样才能让拉威尔优先考虑我的演示路线?我只想限制访问一些类似这样的功能


另外,我不想在if块中添加所有路由。我只想对if块中的路由进行优先级排序。

路由筛选器最好执行此类限制:

Route::filter('checkDemo', function()
{
    if (App::environment() === 'demo')
    {
        return Redirect::to('home')->withMessage('You can''t delete anything on demo application.');
    }
});
并将过滤器设置为您的路线:

Route::group(array('prefix' => 'gag', 'before' => 'checkDemo'), function() 
{
  ...
});
或者,您可以只筛选该特定路线:

Route::get('delete/{id}', array('before' => 'checkDemo', 'uses' => 'Admin\\GagController@delete'));

是的,但是我需要复制gag前缀下的所有路线。我只需要覆盖delete/{id}路由。您不需要复制它们,您可以只在您尝试覆盖的一个路由中添加筛选器。刚刚编辑过。是的,但我有点希望我能在一个单独的地方写,这样会更容易管理。你的解决方案看起来也很酷。如果没有其他不同的方法,我会选择这个作为答案。