我在重定向时遇到了一个错误,我不知道为什么,我阅读了laravel 5.2关于重定向的文档,但仍然不起作用,请帮助我谢谢,这是我在routes.php 中的路线
Route::get('/orders/view/{id}', 'OrderController@view');
这是我在控制器中重定向的代码
return redirect()->route('/orders/view/', ['id' => 5]);
但它仍然给我这个错误
UrlGenerator.php中的InvalidArgumentException第314行:路由[/orders/view/]未定义。
问题
您正试图通过路由的名称重定向到该路由,但您正在将URL传递给该方法。
return redirect() # Initialize a redirect...
->route(...); # to a route by it's name
解决方案
有多种方法可以解决这个问题。您可以通过路径(即你现在想怎么做),或者通过使用路线名称。
方法1:按路径重定向
您可以通过以下两种方式按路径重定向:-用手把小路凹进去-使用URL外观。
手动凹进路径
$url = '/orders/view/' . $order->id;
return redirect($url);
使用URL外观
# Remember to remove the trailing slash.
# Appending a trailing slash would lead to example.com/orders/view//1
$url = URL::to('/orders/view', [$order->id]);
return redirect($url);
你完了!
方法2:按路由名称重定向
要使用路线名称,您需要准备好路线并为其命名
我推荐这种方式,因为有时它更清晰,但也会使当您需要更改某些路径时,更容易维护应用程序,因为名称将保持不变。点击此处了解更多信息:
https://laravel.com/docs/5.2/routing#named-路由
这也允许您使用易于使用且有用的route()
辅助方法。
准备路由文件
要为路由分配名称,您需要将它们传递给app/Http/routes.php
中的路由器。
# Example 1
Route::get('/orders/view/{id}', [
'as' => 'orders.view', 'uses' => 'OrderController@view'
]);
# Example 2
Route::get('/orders/view/{id}', 'OrderController@view')->name('orders.view');
就我自己而言,我建议使用第二种语法。它使您的代码更加可读。
按路由名称重定向
现在是重定向的时候了!如果使用的是管线命名方法,则不会甚至必须对代码进行大量更改。
return redirect()->route('orders.view', ['id' => $order->id]);
我身边的一个音符
查看文档中的路由模型绑定:
https://laravel.com/docs/5.2/routing#route-模型绑定
这允许您将模型实例直接传递给route()
方法它通过将正确的模型传递给控制器方法来帮助您获取模型像这样:
# Generate route URL
route('orders.view', $order);
# Controller
public function view(Order $order) {
return $order;
}
在你的app/Http/routes.php
中,你会有{order}
而不是{id}
:
Route::get('/orders/view/{order}', 'OrderController@view');
您可以使用
return redirect()->action('OrderController@view', ['id' => 5]);
或
// $id = 5
return redirect()->to('/orders/view/'.$id);