Laravel如何使用GET路由名称生成URL?

时间:2018-11-29 23:50:25

标签: php laravel routing

我在路线文件(网络)中找到了这2条路线

    Route::get('management/special-fees/add/{userId}', 'Management\SpecialFeeController@create')->name('management/special-fees/add');
    Route::post('management/special-fees/add', 'Management\SpecialFeeController@store')->name('management/special-fees/add');

它们都使用相同的名称,但到目前为止,它们的名称是GET,另一个是POST。但是现在我想在视图中创建一个URL以打开表单,为此我使用了类似的方法route()

route('management/special-fees/add',$user->id )

但是当尝试转到url时,我得到了这条路线

.../management/special-fees/add?5

因为有问号而不是“ /”,所以路由无效。

我进行了一些测试,我发现发生了这种情况,因为如果这样更改Web文件中的POST路由的url,则尝试转到POST路由而不是GET

Route::get('management/special-fees/add/{userId}', 'Management\SpecialFeeController@create')->name('management/special-fees/add');
Route::post('management/special-fees/addSSSS', 'Management\SpecialFeeController@store')->name('management/special-fees/add');

我实际上将获得此网址

.../management/special-fees/addSSSS?5

那么为什么route()方法为GET上的POST路由生成一个URL?我该如何首先选择GET路线?

3 个答案:

答案 0 :(得分:0)

在laravel中,路由按在route.php文件中写入的顺序进行优先排序。

在这种情况下,您要最后写入Route::post,这反过来告诉Laravel 应该具有最高优先级。尝试切换它们,Route::get将具有更高的优先级。

像这样:

Route::post('management/special-fees/addSSSS', 'Management\SpecialFeeController@store')->name('management/special-fees/add');
Route::get('management/special-fees/add/{userId}', 'Management\SpecialFeeController@create')->name('management/special-fees/add');

答案 1 :(得分:0)

我可能错了,但是我认为您必须重新考虑路线命名。路由命名有助于消除的问题之一是冗余和复杂的名称。例如,如果您查看Route::resource('something', 'SomethingController')的route:list,它将以something.indexsomething.store作为Route::get('something')Route::post('something')的路由名称。

如果名称相同,它将始终解析为第一个,并且可能永远不会到达第二个路线;在您的情况下,它将点击POST路由,而不会到达GET路由。

答案 2 :(得分:0)

?5表示5是您的get路线的参数。 试试这个

  

url('management / special-fees / add /'.$ user-> id)

获取插入的路线

  

route('management / special-fees / add',$ user-> id)

相关问题