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