在控制器上避免使用Laravel外观

Ell*_*sar 4 php laravel

我正在使用Laravel 5.5并试图习惯按psr-2标准编写代码(刚刚开始学习).我用Quafoo QA分析我的所有代码,并逐步修复错误并记录它们.

通过使用外墙我得到这个错误"Avoid using static access to class".因为它我试图避免使用它们.
在我的控制器上我有这个代码:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Events\FileLoaded;
use Illuminate\Support\Facades\Input;
use Illuminate\Auth\Middleware\Authenticate;
use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
use \Illuminate\Contracts\View\Factory as ViewFactory;

class LoadDataController extends Controller
{

    public function index()
    {
        $viewfactory = app(ViewFactory::class);
        return $viewfactory->make('LoadData/index');
    }

    //more code
}
Run Code Online (Sandbox Code Playgroud)

除了View Facade我也使用DB, Input, Validator and Storage 这是正确的方式,还有其他人吗?

Jef*_*eff 5

您无需避免Facades- 它们是框架的关键部分.但是如果你愿意,你可以使用依赖注入来包含你需要的类作为控制器方法中的参数:

class LoadDataController extends Controller
{

  public function index(ViewFactory $viewFactory)
  {
    return $viewfactory->make('LoadData/index');
  }

  //more code
}
Run Code Online (Sandbox Code Playgroud)

或者如果您在所有控制器方法中都需要它:

class LoadDataController extends Controller
{
  private $viewFactory;

  public function __construct(ViewFactory $viewFactory)
  {
    $this->viewFactory = $viewFactory;
  }

  public function index()
  {
    return $this->viewFactory->make('LoadData/index');
  }

  //more code
}
Run Code Online (Sandbox Code Playgroud)

当然,这实际上并没有改变你编写的代码的功能,它只是重新排列它.我不会把你提到的代码分析器的话当作你做错的事.这些是在Laravel中使用的标准模式.