laravel - 404 не найдено, но маршрут существует - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь отправить форму для обновления моей таблицы в БД и для проверки работоспособности контроллера, я сделал несколько тестов. Я учусь передавать данные, используя метод POST. Это мой код.

Маршрут:

Route::prefix('dashboard')->group(function () {
    // Route for panel.
    Route::prefix('panel')->group(function () {
        // Return index home page for panel.
        Route::get('/', 'Panel\DashboardController@index');
        // Update order information (delivery date and order status)
        Route::put('/update-order-information', 'Order\OrderController@update');
    });
}

panel.blade. php (просмотр):

<table class="table table-light ">
    <thead class="thead-dark">
    <tr>
        <th scope="col">Order ID</th>
        <th scope="col">Delivery Date</th>
        <th scope="col">Order Info</th>
        <th scope="col">Order Status</th>
        <th scope="col">Purchase Order</th>
    </tr>
    </thead>
    <tbody>
    @foreach ($customerOrders as $customerOrder)
    <tr>
        <form action="/dashboard/panel/update-order-information/{{$customerOrder->order_id}}" method="POST">
            <input type="hidden" name="_method" value="PUT">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <td>{{$customerOrder->order_id}}</td>
            <td>
                <input name='delivery_date' class="date form-control" type="text" placeholder="Select delivery date"
                       autocomplete="off">
            </td>
            <td>{{$customerOrder->product_name}}</td>
            <td>
                <select id="status" name="status">
                    <option value="inProgress">In Progress</option>
                    <option value="shipped">Order Shipped</option>
                    <option value="cancelled">Cancelled</option>
                </select>
            </td>
            <td>{{$customerOrder->purchase_order}}
                <input type="submit" value="Submit">
            </td>
        </form>
    </tr>
    @endforeach
    </tbody>
</table>

OrderController. php:

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{
    $order = new Order();
    findOrFail($id);
    $order->order_id = $request->input('delivery_date');
    $order->order_status = $request->input('status');
    $order->save();
}

Когда я нажимаю кнопку отправки, мне выдаётся страница 404. Кто-нибудь может указать на мою ошибку?

Ответы [ 2 ]

3 голосов
/ 04 марта 2020

Попробуйте использовать URL в действии формы.

<form action="{{ url('dashboard/panel/update-order-information') }}" method="POST" > 
   <input type="hidden" name="_method" value="PUT">
   <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

Или же вы можете определить имя маршрута , как показано ниже.

Route::put('/update-order-information', 'Order\OrderController@update')->name('update.order');

<form action="{{ route('update.order') }}" method="POST" > 
   <input type="hidden" name="_method" value="PUT">
   <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

Редактировать: -

В вашем методе контроллера вы ожидаете $id, но в URL вы не передаете идентификатор заказа.

<form action="{{ route('update.order',['id'=>$customerOrder->order_id]) }}" method="POST" > 
   <input type="hidden" name="_method" value="PUT">
   <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

Маршрут. php

Route::put('/update-order-information/{id}', 'Order\OrderController@update')->name('update.order');

Контроллер.

public function update(Request $request, $id)
{
    dd("hello");
    // $panel = new Order();
    // $panel->order_id = $request->input('delivery_date');
}
2 голосов
/ 04 марта 2020

добавить / перед вашим URL, как это

<form action="/dashboard/panel/update-order-information/{{$customerOrder->id}}" method="POST" > 

Редактировать:

 /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $panel = Order::findOrFail($id)
        $panel->column_in_your_database = $request->input('delivery_date');
        $panel->save();
    }  

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...