Laravel 5.2按条件为不同的控制器动作分配相同的路径

时间:2016-06-17 01:28:31

标签: php laravel laravel-5 controller routes

我希望根据用户类型将相同的路由路由到不同的控制器。

    if (Auth::check() && Auth::user()->is_admin) {
        Route::get('/profile', 'AdminController@show');
    } elseif (Auth::check() && Auth::user()->is_superadmin) {
        Route::get('/profile', 'SuperAdminController@show');
    }

但这不起作用。

我怎样才能让它像我想要的那样工作?

2 个答案:

答案 0 :(得分:4)

你可以这样做

    Route::get('/profile', 'HomeController@profile'); // another route

<强>控制器

    public function profile() {
         if (Auth::check() && Auth::user()->is_admin) {
           $test = app('App\Http\Controllers\AdminController')->getshow();

          }
         elseif (Auth::check() && Auth::user()->is_superadmin) {
         $test = app('App\Http\Controllers\SuperAdminController')->getshow();
         // this must not return a view but it will return just the needed data , you can pass parameters like this `->getshow($param1,$param2)`

         }

        return View('profile')->with('data', $test);
           }

但我觉得使用特质更好

trait Show {

    public function showadmin() {
    .....
    }
    public function showuser() {
    .....
    }
}

然后

class HomeController extends Controller {
     use Show;
}

然后你可以像上面那样做,而不是

   $test = app('App\Http\Controllers\AdminController')->getshow();// or the other one

使用此

$this->showadmin();
$this->showuser(); // and use If statment ofc

答案 1 :(得分:1)

okey你可以通过创建route::group

来做到这一点

您的路线组将是那样的

    route::group(['prefix'=>'yourPrefix','middleware'=>'yourMiddleware'],function(){

        if (Auth::check() && Auth::user()->is_admin)
        {
            Route::get('profile', 'AdminController@show');
        }
        else
        {
            Route::get('profile', 'SuperAdminController@show');
        }

    });

我希望这会对你有帮助。