【问题标题】:How to choose a Controller in the routes如何在路由中选择控制器
【发布时间】:2016-08-23 16:02:43
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 也许,当您对某个问题投反对票时,您可以解释原因以便改进它,对吧?

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


【解决方案1】:

实际上,没有必要创建两个用户控制器。只需使用中间件来限制客户端的访问权限。这样就可以保留原来的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

【讨论】:

  • 感谢@HongbinWangI,但不要认为 Laravel 4.2 支持中间件
  • 很抱歉我忽略了你的 laravel 版本。
猜你喜欢
  • 2017-04-15
  • 2019-04-27
  • 1970-01-01
  • 2019-12-12
  • 2014-02-02
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多