如何在路线中选择控制器



在Laravel 4.2中,我有以下路径:

Route::group(array('before' => 'auth'), function() {
    Route::post('/account/edit', array(
        'as'   => 'account-edit',
        'uses' => 'UserController@accEdit'
    ));
});

我有一个ClientControllerAdminController,分别用于普通用户和管理员。

假设我知道用户类型(Auth::getUser()->getType()),如何在不向routes类添加额外逻辑的情况下用正确的控制器替换UserController?这可以用过滤器完成吗?

我试图避免在路线和最终控制器之间增加一个控制器。

实际上,不需要创建两个用户控制器。只需使用中间件来限制客户端的访问权限。通过这种方式,您可以保留原始UserController

您可以在中间件中添加IsAdmin.php

<?php namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRedirectResponse;
use IlluminateContractsAuthGuard;
class IsAdmin {
    public function handle($request, Closure $next)
    {
        if (Auth::getUser()->getType() === 'admin')
        {
            return $next($request);
        }
        return new RedirectResponse(url('/'));
    }
}

kernel.php中,您需要声明您的中间件。

protected $routeMiddleware = [
        // some other middlewares
        'admin' => 'AppHttpMiddlewareIsAdmin',
    ];

然后,在UserController.phppublic function __construct中添加以下语句

$this->middleware('admin', ['only' => ['OnlyForAdmin1','OnlyForAdmin2']]);

因此,客户端将无法访问函数OnlyForAdmin1和函数OnlyForAdmin2

最新更新