Функция обновления Laravel не запускает правильный ответ - PullRequest
0 голосов
/ 30 декабря 2018

Когда я пытаюсь обновить запись в моем приложении Laravel, он запускает неправильный URL, вызывая ошибку 404. Эта функция работала нормально, когда я разрабатывал локально, однако теперь она размещена на сервере one.com, она имеетперестал работать.

edit.blade.php

<form method="POST" action="gins/{{ $gins->id }}">
    @method('PATCH')
    @csrf

    <div class="field">
        <label class="label" for="gin">Gin</label>
        <div class="control">
            <input type="text" class="input" name="gin"
                   placeholder="Gin" value="{{ $gins->gin }}">
        </div>
    </div>

    <div class="field">
        <label class="label" for="size">Bottle Size(ml)</label>
        <div class="control">
            <input type="text" class="input" name="size"
                   placeholder="Size (ml)" value="{{ $gins->size }}">
        </div>
    </div>

    <div class="field">
        <label class="label" for="price">Price(£)</label>
        <div class="control">
            <input type="text" class="input" name="price"
                   placeholder="Price of Gin" value="{{ $gins->price }}">
        </div>
    </div>

    <div class="field">
        <div class="control">
            <button type="submit" class="button is-success">Update Record
            </button>
        </div>
    </div>
</form>

Маршрут

Route::patch('gins/{gin}', 'PostsController@update')->middleware('auth');
Auth::routes(); 

Контроллер

public function update(Request $request, $id)
{
    $gins = \App\Gins::findOrFail($id);

    $gins->gin = request('gin');
    $gins->size = request('size');
    $gins->price = request('price');

    $gins->save();

    return redirect('gins');
}

URL-адрес страницы редактирования: Laravel/gins/7/edit.Когда я нажимаю кнопку отправки, он возвращает URL Laravel/gins/7/gins/7, когда он должен быть перенаправлен обратно на Laravel/gins/7.

7 в URL-адресе - это запись id из конкретной записи, которую япытается обновить.

1 Ответ

0 голосов
/ 30 декабря 2018

Это всегда плохая идея - жестко кодировать URL-адреса.Следующее значение

<form method="POST" action="gins/{{ $gins->id }}">

на маршруте, подобном laravel/gins/, оценивается как laravel/gins/gins/7.

Кроме того, маршруты все время меняются в динамическом веб-приложении.По этой причине я рекомендую вам использовать Именованные маршруты .Например:

Route::patch('gins/{gin}', 'PostsController@update')
        ->middleware('auth')
        ->name('posts.update');

и затем измените действие формы следующим образом:

<form method="POST" action="{{ route('posts.update', ['gin' => $gins->id]) }}">

Я бы также немного очистил ваш метод update().

public function update(Request $request, $id)
{
    $gins = \App\Gins::findOrFail($id);

    $gins->gin   = request('gin');
    $gins->size  = request('size');
    $gins->price = request('price');

    $gins->save();

    // change this to a named route as well        
    return redirect('gins');

    // or if you just want to return back to the previous page, you can do
    // return back(); 
}
...