如何在路线中选择控制器

时间:2016-04-28 18:04:46

标签: php laravel laravel-4 routes laravel-routing

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

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

我分别为普通用户和管理员提供了ClientControllerAdminController

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

我正在尝试避免路由和最终控制器之间的额外控制器。

1 个答案:

答案 0 :(得分:0)

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

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

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\RedirectResponse;
use Illuminate\Contracts\Auth\Guard;

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' => 'App\Http\Middleware\IsAdmin',
    ];

然后,在 UserController.php

public function __construct中添加以下语句
$this->middleware('admin', ['only' => ['OnlyForAdmin1','OnlyForAdmin2']]);

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