在RouteServiceProvider中使用Service - Laravel 5.2

时间:2016-01-28 19:11:23

标签: php laravel laravel-5.2

我试图使用我的路线服务提供商提供的服务。

我已经尝试过在任何控制器中通常做的事情

    use App\Services\EncryptionService;

class RouteServiceProvider extends ServiceProvider{
.. 
    public function __construct(EncryptionService $encryption) {

        $this->encryption = $encryption;
    } // end function constructor

..
}

我得到的错误是

ErrorException in RouteServiceProvider.php line 32:
Argument 1 passed to App\Providers\RouteServiceProvider::__construct() must be an instance of App\Services\EncryptionService, instance of Illuminate\Foundation\Application given, called in /Users/Dale/Desktop/work/0.2/bootstrap/cache/compiled.php on line 7335 and defined

如果我不能使用构造函数,我如何访问我在服务中使用的方法?

3 个答案:

答案 0 :(得分:1)

传递给服务提供者的参数是应用程序本身。您可以使用App::make()来解决依赖关系:

class RouteServiceProvider extends ServiceProvider{
.. 
public function __construct($app) {

    $this->encryption = $app->make('App\Services\EncryptionService');

} // end function constructor

..
}

您只能在容器解析的类中使用依赖项,请在此处阅读:

https://laravel.com/docs/5.2/container#resolving

答案 1 :(得分:0)

这段代码看起来不错。问题似乎是您创建使用服务的位置。因此,请查看代码中的代码:

$myRouteServiceProvider = new RouteServiceProvider($myparameter);

$ myparameter here必须是以下类型的对象:App \ Services \ EncryptionService

答案 2 :(得分:0)

您可以使用boot方法。

来自Laravel的引文,https://laravel.com/docs/master/providers#the-boot-method

  

您可以为服务提供商的启动方法键入提示依赖项。服务容器将自动注入您需要的任何依赖项:

use App\Services\EncryptionService;

class RouteServiceProvider extends ServiceProvider{
    public function boot(Router $router, EncryptionService $encryption) {
        parent::boot($router);
        //you can use your EncryptionService
    }
}