Laravel 表单发布到错误的路线

Posted

技术标签:

【中文标题】Laravel 表单发布到错误的路线【英文标题】:Laravel Form Post To Wrong Route 【发布时间】:2019-05-21 01:42:38 【问题描述】:

使用我的应用程序,我有一个带有如下搜索表单的订单视图

@include('inc.header')

@yield('content')

<form class="needs-validation" method="post" action="url('/wapp/orders/search')">
    @csrf
        <div class="input-group mb-3">
                <div class="input-group-prepend">
                  <button class="btn btn-outline-primary" type="submit">Search</button>
                </div>
                <input type="text" class="form-control" placeholder=" Search By Order ID" name="oid">
        </div>
</form><br>

OrderController 搜索功能:

public function search(Request $request)
    
        $order = DB::table('orders')
                        ->join('users as a','a.uid', '=','orders.sender_uid')
                        ->join('users as b','b.uid', '=','orders.receiver_uid')
                        ->select('orders.oid','orders.price','orders.status','a.name as sender','b.name as receiver')
                        ->where('oid','=' , $request->oid)
                        ->first();

        if($order)
            return view('pages.search')->with('order',$order);
        else
            return back()->with('error','Order Not Found');

        

    

通过 ID 成功找到订单并在搜索视图中显示其结果。

我还在搜索视图中包含了相同的搜索表单,以防用户想要搜索更多订单,

@include('inc.header')

@yield('content')


<form class="needs-validation" method="post" action="url('/wapp/orders/search')">
    @csrf
        <div class="input-group mb-3">
                <div class="input-group-prepend">
                  <button class="btn btn-outline-primary" type="submit">Search</button>
                </div>
                <input type="text" class="form-control" placeholder=" Search By Order ID" name="oid">
        </div>
</form><br>


@if ($order)


        <table class="table">
                <thead class="thead-dark">
                  <tr>
                    <th scope="col">Price</th>
                    <th scope="col">OID</th>
                    <th scope="col">Name</th>
                    <th scope="col">Province</th>
                    <th scope="col">Action</th>
                  </tr>
                </thead>
                <tbody>


                            <tr>
                            <td class="bg-success">$order->price</td>
                            <td>$order->oid</td>
                                <td>$order->sender</td>
                                <td>$order->receiver</td>
                                <td><a class="btn btn-primary" href="url('wapp/orders/'.$order->oid)" role="button">Link</a></td>
                            </tr>


                </tbody>
              </table><br>

@endif






@include('inc.footer')

这是我的路线:

Route::group(
    [           
        'namespace' => 'V1',
        'prefix' => 'wapp',
    ], function()

        Route::get('/', 'LoginController@index');
        Route::post('/', 'LoginController@login');
        Route::get('/orders', 'OrderController@index');
        Route::post('/orders/search', 'OrderController@search');
        Route::get('/orders/oid', 'OrderController@show');

        Route::patch('/orders/oid', 'OrderController@update');
        Route::get('/region','RegionController@index');


);

我的问题是当用户输入错误的订单 ID 或只是按下搜索按钮时,应用程序将重定向到 OrderController@show,这是表中的订单详细信息按钮路由??!!为什么会这样

注意:如果用户提供有效的订单 ID,一切正常!

任何想法将不胜感激

【问题讨论】:

【参考方案1】:

如果您正在修改您的浏览器 URL,然后按 Enter,它会将您重定向到订单详细信息页面,因为它是一个获取请求,而在 GET 请求中,您将返回订单详细信息,并且您的搜索方法是在 POST 方法上定义的仅在发出 POST 请求时才起作用,您只能通过提交表单来发出请求。

此外,如果您操作正确,则运行以下命令会有所帮助。

php artisan route:clear

【讨论】:

@Rafy 我没有使用浏览器 URL,当用户单击搜索按钮并且您可以看到它的 POST 请求并且仅当用户输入无效的订单 ID 或搜索输入为空!

以上是关于Laravel 表单发布到错误的路线的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 表单发布 - MethodNotAllowedHttpException

提交表单 Laravel 后重定向到不同的路由

Laravel 重定向到错误的路线

Laravel调用错误的方法[关闭]

Laravel:通过无表单的 AJAX 向控制器发送数据

将图像链接到 Laravel 中的路线