Метод создания контроллера Laravel для обновления 1 столбца из 1 строки - PullRequest
0 голосов
/ 28 января 2019

Я делаю сайт для приюта для собак, и я хочу сделать кнопку, которая пометит собаку как принятую.Другими словами, я пытаюсь обновить 1 столбец из 1 строки.Он всегда будет установлен с ложного на истинное.

Я попытался создать свой собственный метод в моем существующем контроллере, добавить маршрут и создать форму, но я получаю сообщения об ошибках, которые требуются и для некоторых других полей, которые являются теми же обязательными полями, когда я создаю новыйсобака (имя, пол, DoB и т. д.).

Код метода в моем контроллере:

public function markAsAdopted(Request $request, $id){
    $pet = Pet::table('pets')->where('id', $id)->update(['is_adopted' => true]);

    return redirect("/pets/$pet->id")->with('success', 'Successfully marked as adopted');
}

Код маршрута:

Route::patch('/pets/{id}', 'PetsController@markAsAdopted');

Кодform:

{!! Form::open(['action' => ['PetsController@markAsAdopted', $pet->id], 'method' => 'POST', 'class' => 'float-right ml-1 mr-1']) !!}
    {{Form::hidden('_method', 'PATCH')}}
    {{Form::submit('Mark as adopted', ['class' => 'btn btn-success'])}}
{!! Form::close() !!}

Форма находится на странице / pets / {id} Я создал все другие маршруты в этом контроллере с флагом --resource при создании контроллера, поэтому каркас CRUD былтам.

Я что-то пропустил?ИЛИ есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 28 января 2019

Laravel направляет вызов markAsAdopted на ваш update() (или, возможно, create() в зависимости от того, как у вас установлены маршруты) вместо метода markAsAdopted().Это, в свою очередь, вызов вашего класса PetsRequest (или того, что вы называли своим классом проверки).

Скорее всего, он приходит как POST и, возможно, игнорирует метод PATCH, таким образом, перенаправляется на update().Вы можете сделать несколько вещей - переместить метод исправления выше в файле Routes и протестировать, выбрав POST.Если это работает, вы знаете, что это проблема.Это всего лишь тест - вы сломаете POST других домашних животных, появляющийся под ним в файле Routes, поэтому не забудьте поменять его обратно :)

Я обычно вообще пропускаю патч, поскольку я запускаюв аналогичные вопросы.Обычно я просто создаю POST-маршрут со специальным именем (например, Route::post('/petsMarkAsAdopted/{id}', 'PetsController@markAsAdopted');) и открываю форму с URL-адресом этого специального маршрута.

Если вы действительно хотите сохранить PATCH, выполните тест с более высоким размещением, описанный выше.и вы можете использовать blade-сервер для установки метода после открытия формы, например, так:

@method('PATCH')

Редактировать: Как отмечалось в комментариях, вышеизложенное исправляет маршрутизацию, но тамЭто другая проблема в вашем методе контроллера теперь, когда мы можем получить к нему доступ.Возьмите table() и просто позвоните модели, чтобы получить питомца, который вам нужен.Я выделил призыв для ясности:

$pet = Pet::where('id', $id)->first();
$pet->update(['is_adopted' => true]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...