【问题标题】:Laravel 5.2 Redirecting With WildCard ID not workingLaravel 5.2 使用通配符 ID 重定向不起作用
【发布时间】:2018-04-08 14:22:42
【问题描述】:

我在重定向时遇到错误我不知道为什么,我阅读了有关重定向的 laravel 5.2 文档,但仍然无法正常工作,请帮助我,谢谢,这是我在 routes.php 中的路线

Route::get('/orders/view/{id}', 'OrderController@view');

这是我在控制器中用于重定向的代码

return redirect()->route('/orders/view/', ['id' => 5]);

它仍然给我这个错误

UrlGenerator.php 第 314 行中的 InvalidArgumentException:路由 [/orders/view/] 未定义。

【问题讨论】:

    标签: php laravel redirect


    【解决方案1】:

    问题

    您正试图通过其名称重定向到一个路由,但您将一个 URL 传递给该方法。

    return redirect()       # Initialize a redirect...
           ->route(...);    # to a route by it's name
    

    解决方案

    有多种方法可以解决这个问题。您可以通过路径重定向(即 您目前正在尝试如何做),或者使用路线名称。

    方法一:按路径重定向

    您可以通过两种方式通过路径重定向: - 手动连接路径 - 使用 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);
    

    你已经完成了!

    方法二:通过路由名重定向

    要使用路线名称,您需要准备路线并为其命名。
    我推荐这种方式,因为有时它更清楚,但它也使 当您需要更改某些路径时,可以更轻松地维护您的应用程序,因为 名字还是一样的。在此处阅读更多信息:
    https://laravel.com/docs/5.2/routing#named-routes

    这还允许您使用易于使用且有用的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]);
    

    我身边的一封信

    查看文档中的 route-model-binding:
    https://laravel.com/docs/5.2/routing#route-model-binding

    这允许您将模型实例直接传递给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');
    

    【讨论】:

      【解决方案2】:

      你可以使用

      return redirect()->action('OrderController@view', ['id' => 5]);
      

      // $id = 5
      
      return redirect()->to('/orders/view/'.$id);
      

      【讨论】:

        猜你喜欢
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-22
        • 2016-10-03
        相关资源
        最近更新 更多