Laravel强制删除会生成NotFoundHttpException

时间:2014-04-26 03:00:51

标签: php laravel

我已经阅读了尽可能多的帖子,但没有一个可以解决我的问题。

路线:

Route::model('user', 'User');
Route::group(array('prefix' => 'admin'), function() {
    Route::get('users/force-delete/{user}', array(
        'as'    => 'admin-users-force-delete',
        'uses'  => 'AdminController@handleUserForceDelete'
    ));
});

html:

<li><a href="{{ action('AdminController@handleUserForceDelete', $user->id) }}">Force Delete</a></li>

处理程序:

public function handleUserForceDelete(User $user)
    {


        $username_tmp = $user->username;
        $message = 'Success! User ' . $username_tmp . ' has been deleted.';

        if($user->trashed())
        {
            $user->forceDelete();
            return Redirect::action('AdminController@showUsers')->with('message', $message);
        } else {
            return Redirect::action('AdminController@showUsers')->with('message', 'User deletion error! Please try again!');
        }
    }

我试图在同一个处理程序中放置delete和force-delete,并且删除操作发生但强制删除生成了NotFoundHttpException。所以我猜问题来自强制删除动作??

1 个答案:

答案 0 :(得分:1)

我解决了!
对于任何遇到同样问题的人,软删除的用户(或任何东西)不会生成传递给处理程序(或闭包)的实例。因此,对于这种情况,我手动创建一个实例。

所以不要使用它:

//will not handle soft deleted model.
Route::model('user', 'User');

使用此:

Route::bind('user', function($value, $route)
{
    return User::withTrashed()->where('id', '=', $value)->first();
});