如何在Symfony 4中将供应商类作为服务加载?

时间:2018-10-26 12:55:00

标签: service jwt symfony4

我在项目中使用了jwt firebase类,它在供应商中的路径为:

vendor\firebase\php-jwt\src\jwt

我正在尝试将该类定义为能够注入另一个类的服务,但我无法做到这一点。

我要在service.yml文件中做到这一点:

#services.yaml    
services:
    Firebase:
        class: '../vendor\firebase\php-jwt\JWT'

这是我创建的课程:

<?php

namespace App\Helpers;

use Firebase\JWT\JWT;

use Symfony\Component\HttpKernel\KernelInterface;

class simpleJwt
{
    private $encrypt = 'RS256';

    function __construct(KernelInterface $kernel, JWT $JWT )
    {
        $this->rootDir = $kernel->getProjectDir();
        $this->jwt = $JWT;
    }
}

当我尝试加载它时,出现此错误:

Cannot autowire service "App\Helpers\simpleJwt": argument "$JWT" of method "__construct()" references class "Firebase\JWT\JWT" but no such service exists. 

谢谢

3 个答案:

答案 0 :(得分:0)

尝试在您的services.yaml中的“类:../ vendor \ firebase \ php-jwt \ JWT”下添加“ autowire:true”

答案 1 :(得分:0)

您尝试导入的捆绑软件可能与Symfony的自动接线不兼容。确保使用捆绑软件的最新版本(较新版本可能兼容)。如果您已经在使用最新版本,则可能需要在services.yaml中为该捆绑包创建一个别名,以便以后在课堂上使用它。您可以使用bin / console debug:container来检查可用的服务,并为所需的服务手动创建别名。碰巧大多数供应商捆绑包中通常都会关闭自动接线。

答案 2 :(得分:0)

只需在config.yaml中添加完整的命名空间

services:

    Firebase\JWT\JWT:

您还可以使用参数向服务构造函数提供要求:

services:

    Namespace\Domain\ServiceName:
        arguments:
            - '@Another\Namespace\Class'
            - '@service.name'
            - '%parameter%'

官方文档中的更多详细信息和功能: Service Container (Symfony Docs)

请注意,您将通过自动装配来访问服务,并且您不会直接通过容器访问它,因为默认情况下,服务public参数设置为false(根据Symfony文档,public:不建议使用true )。