laravel soft delete, используя форму

88
14

Привет, Я пытаюсь мягко удалить и восстановить пользователя, используя форму, я использую пару пакетов для пользователя auth и роли, которые являются Zizaco Confide и Zizaco Entrust. Я добавил следующее к модели user.php

use SoftDeletingTrait;
use ConfideUser;
use HasRole;
protected $softDelete = true;

и я проверил тест, чтобы проверить это:

Route::get('/deleteme', function(){ 
User::find(2)->delete();
return 'done';
});

и это обновило поле timestamp, однако я хочу поместить это в свой контроллер, чтобы опереться и дать ему форму. Поэтому я сделал это в таблице пользователей:

 @if(empty($user->deleted_at))
{{Form::open(['method'=>'PATCH','action'=>
['UsersController@softDeleteUser',$user->id]])}}
<button type="submit">Suspend</button>
{{Form::close()}}
@else
{{Form::open(['method'=>'delete','action'=>
['UsersController@restoreUser',$user->id]])}}
<button type="submit">Re-activate</button>
{{Form::close()}}
@endif

и в моем контроллере:

public function softDeleteUser($id){
$user = User::find($id);
$user->delete();
// redirect
return Redirect::to('/admin');
}

public function restoreUser($id) {
User::find($id)->restore();
$user->save();
Redirect::to("/admin");
}

На моих маршрутах:

Route::post('/admin/user/{resource}/delete', 
array('as' => 'admin.user.delete', 'uses'
=>'UsersController@softDeleteUser'));
Route::post('/admin/user/{resource}/restore',
array('as' => 'admin.user.restore',
'uses' =>'UsersController@restoreUser'));

Однако я получаю эту ошибку:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException 

Любые идеи, что я делаю неправильно?

спросил(а) 2021-01-19T16:29:57+03:00 2 месяца, 3 недели назад
1
Решение
62

Ну, вы установили две формы для использования метода PATCH и DELETE, но для ваших маршрутов установлено значение POST (Route::post).

Вы можете изменить маршруты:

Route::patch('/admin/user/{resource}/delete', 
array('as' => 'admin.user.delete', 'uses'
=>'UsersController@softDeleteUser'));
Route::delete('/admin/user/{resource}/restore',
array('as' => 'admin.user.restore',
'uses' =>'UsersController@restoreUser'));

Или удалите этот method в своих формах (по умолчанию он будет POST)

{{Form::open(['action'=> ['UsersController@softDeleteUser',$user->id]])}}
<button type="submit">Suspend</button>
{{Form::close()}}

А также

{{Form::open(['action'=> ['UsersController@restoreUser',$user->id]])}}
<button type="submit">Re-activate</button>
{{Form::close()}}

ответил(а) 2021-01-19T16:29:57+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема