动作助手和路由优先级 laravel 5

action helper and routing priority laravel 5

我有两条规则

Route::get('this-is-an-awesome-route', 'Ads@getIndex');
Route::controller('ads', 'Ads');

动作('Ads@getIndex')渲染

http://my-awesome-domain/ads

我要

http://my-awesome-domain/this-is-an-awesome-route

有什么问题吗?

第二个路由正在重写第一个路由声明。让我们看看:

// Ads@getIndex will be called
Route::get('this-is-an-awesome-route', 'Ads@getIndex');

// Ads@getIndex will be called too by native definition
Route::controller('ads', 'Ads');

因为 Route::controller('ads', 'Ads') 被称为最新的声明,它将覆盖前一个。所以,你至少有两种方法可以完成这个任务

  1. 您可以在 Ads 控制器中创建一个新函数来响应第一条路线:

    Route::get('this-is-an-awesome-route', 'Ads@awesome');
    

    然后:

    public function awesome(){
        // do stuff here
    }
    
  2. 重命名控制器的路由名称

    Route::controller('ads', 'Ads', [
        'getIndex' => 'ads.getHome',
    ]);
    

    现在您的 Route::controller('ads', 'Ads'); 将响应 getHome() 而不是 getIndex() 根据重命名的路线:

    public function getHome(){
        // do stuff for getIndex() definitions here
    }
    

出于某种原因,从 Laravel 4.2Laravel 5 逻辑发生了一点变化。你写的那行之前是有效的,你只需要反转一切,因为路由器没有以同样的方式处理你的代码。

经过测试且有效的解决方案

Route::controller('ads', 'Ads');
Route::get('this-is-an-awesome-route', 'Ads@getIndex');

第一条路线将被第二条路线覆盖。