мягкое удаление laravel с использованием формы

Привет, я пытаюсь мягко удалить и восстановить пользователя с помощью формы, я использую пару пакетов для аутентификации пользователя и ролей, которые 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';
});

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

 @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 

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


person 001221    schedule 07.02.2015    source источник


Ответы (1)


Итак, вы настроили свои две формы на использование методов 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()}}  
person lukasgeiter    schedule 07.02.2015