【问题标题】:How to lessen redundant line of code? (php)如何减少多余的代码行? (php)
【发布时间】:2020-01-08 18:10:03
【问题描述】:

我的控制器已经工作并完成。但我观察到代码的冗余/重复。

专门针对以下代码:

$this->authorize('applicant', $job);

这是我的控制器中的完整代码:

public function interviewees(Job $job)
{       
    //more codes
}

public function applicants(Job $job)
{       
    //more codes
}

public function apply(Job $job)
{   
    $this->authorize('applicant', $job);

    //more codes
}

public function cancel(Job $job)
{   
    $this->authorize('applicant', $job);

    //more codes
}

//and 5 more methods using same code of $this->authorize('applicant', $job);


我的问题是在 php 或 laravel 中我们可以处理这种情况,减少冗余代码吗?

【问题讨论】:

  • 如果这需要为每个动作触发,那么只需将授权调用移动到您的构造函数。 (或任何 Laravel 提供的等效启动机制。)
  • @AlexHowansky 我也这么认为,另外一个问题是,有些方法没有$this->authorize('applicant', $job);。谢谢先生回复
  • 啊,好吧,我对 Laravel 不熟悉,不确定 setUp()ignore() 是否是操作。
  • 您可以将其拆分为两个控制器,将需要身份验证的操作放在一个控制器中,将不需要身份验证的操作放在另一个控制器中。然后把 auth 放到构造函数中。
  • @AlexHowansky 我可以使用__construct() 在一行中调用该代码。另一个问题并非所有方法都需要该代码。嗯..也许我会等其他人,如果他们有这个想法。否则我会做你的建议。不过感谢您的建议。

标签: php laravel laravel-5 laravel-6


【解决方案1】:

您可以使用laravel-middleware 代替策略,在您的__construct() 中申请特定方法:

php artisan make:middleware OperatorMiddleware

在句柄方法中做一些过滤。

class OperatorMiddleware
{
    public function handle($request, Closure $next, $guard = null)
    {
        //do some filter here

        return $next($request);
    }
}

\Http\Kernel.php里面,注册routeMiddleware里面的中间件。

protected $routeMiddleware = [
    'operator' => \App\Http\Middleware\OperatorMiddleware::class,
],

您可以为特定方法调用它:

public function __construct()
{
    $this->middleware('operator', ['only' => ['apply','cancel']]);
}

【讨论】:

  • 中间件似乎就是为此而构建的。
猜你喜欢
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多