我在项目中使用了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.
谢谢
答案 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 )。