【发布时间】:2025-12-18 00:00:03
【问题描述】:
我在我的 laravel 4 项目中遇到了这个烦人的问题,该项目有三种类型的用户,即学生、教师和版主(我使用 Entrust 作为角色管理解决方案)。
他们每个人都可以浏览相同的路线,但根据用户类型,应该调用另一个方法。所以我的 route.php 文件的结构是这样的:
Route::group(array('before' => 'auth'), function(){
Route::group(array('before' => 'teacher'), function(){
Route::get('/tasks',array('as'=>'tasks','uses'=>'TasksController@tasksAsTeacher'));
Route::get('/task/{id}',array('as'=>'showTask','uses'=>'TasksController@showTaskAsTeacher'));
});
Route::group(array('before' => 'moderator'), function(){
Route::get('/tasks',array('as'=>'tasks','uses'=>'TasksController@tasksAsModerator'));
Route::get('/task/{id}',array('as'=>'showTask','uses'=>'TasksController@showTaskAsModerator'));
});
Route::group(array('before' => 'student'), function(){
Route::get('/tasks',array('as'=>'tasks','uses'=>'TasksController@tasksAsStudent'));
Route::get('/task/{id}',array('as'=>'showTask','uses'=>'TasksController@showTaskAsStudent'));
});
});
但是,使用教师或版主帐户浏览这些路线总是返回 404 错误。我发现这是因为在另外两个过滤器组中重新定义了路由。
因此,如果我将教师用户重定向到“showTask”,laravel 会将任务作为学生的路由返回,因为这是最后一次重新定义“showTask”路由,我会收到 404 错误。
我现在的问题是:处理此错误的最佳方法是什么?
我希望这不会太混乱。提前致谢!
【问题讨论】:
-
这些过滤器在哪里?这可能是 Entrust 问题,而不是 laravel 的问题
-
@SteveBauman in app/filters.php
标签: php laravel laravel-4 laravel-routing