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

时间:2015-10-29 02:54:27

标签: laravel-5.1 laravel-routing

我有两条规则

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

action('Ads @ getIndex')呈现

http://my-awesome-domain/ads

我想要

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

有什么问题?

2 个答案:

答案 0 :(得分:1)

第二条路线是重写第一条路线声明。我们来看看:

// 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
    }
    

答案 1 :(得分:1)

出于某种原因,从 Laravel 4.2 Laravel 5 ,逻辑发生了一些变化。您之前编写的这一行正在使用,您只需要反转所有内容,因为路由器不会以相同的方式处理您的代码。

经过测试和运行的解决方案

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

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