我在 Laravel 中有一个简单的 todo 应用程序。我已经实现了全局范围,以避免用户能够更改其他用户的待办事项。我的全局范围如下所示:
class UserScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$builder->where('user_id', '=', Auth::id());
}
}
在 Todo 模型中,我有以下内容:
类 Todo 扩展模型 { ...
protected static function booted()
{
static::addGlobalScope(new UserScope);
}
}
路由文件是:
Auth::routes();
Route::group(['middleware' => ['auth', 'verified']], function() {
Route::get('todos', 'TodosController@index')->name('todos.index');
Route::post('todos', 'TodosController@store')->name('todos.store');
Route::get('todos/create', 'TodosController@create')->name('todos.create');
Route::patch('todos/{todo}', 'TodosController@update')->name('todos.update');
Route::get('todos/{todo}', 'TodosController@show')->name('todos.show');
Route::delete('todos/{todo}', 'TodosController@destroy')->name('todos.destroy');
Route::get('todos/{todo}/edit', 'TodosController@edit')->name('todos.edit');
});
这很好用,用户无法访问其他人的项目。
但是,如果我有以下 URL:
我收到一条简单的错误消息。
ErrorException 未定义的变量:todo
原因是路线“blabla”不存在。此外,待办事项“1blabla”不存在。
我在想 Global Scopes 也会处理这个问题,但显然不是这样。
在 Laravel 中定义处理此问题的全部路线的最佳方法是什么。