【发布时间】:2021-02-26 09:09:55
【问题描述】:
我是 Symfony 的新手,但我知道如何在 PHP 中使用 OOP。 我尝试(沮丧地)使用 Doctrine 实体将自定义参数与 Symfony 配置结合起来。
为了解决我使用的问题,例如Michael Sivolobov 的回答:https://stackoverflow.com/a/28726681/2114615 和其他来源。
我的解决方案:
第 1 步:在 config 文件夹中创建新包
-> config
-> packages
-> project
-> services.yaml
-> project
-> src
-> ParameterLoaderBundle.php
-> DependencyInjection
-> Compiler
-> ParameterLoaderPass.php
第 2 步:导入新资源
# config/services.yaml
...
imports:
- { resource: 'packages/project/config/services.yaml' }
...
第 3 步:包装编码
# packages/project/config/services.yaml
services:
Project\:
resource: "../src"
<?php
namespace Project;
use Project\DependencyInjection\Compiler\ParameterLoaderPass;
use Symfony\Component\DependencyInjection\Compiler\PassConfig;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class ParameterLoaderBundle extends Bundle
{
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new ParameterLoaderPass(), PassConfig::TYPE_AFTER_REMOVING);
}
}
<?php
namespace Project\DependencyInjection\Compiler;
use App\Entity\SettingCategory;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
class ParameterLoaderPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$em = $container->get('doctrine.orm.default_entity_manager');
$setting = $em->getRepository(SettingCategory::class)->findAll();
$container->setParameter('test', $setting);
}
}
毕竟我在我的 API 控制器中测试了新参数:
$this->getParameter('Test');
但出现以下错误信息:
The parameter \"test\" must be defined.
【问题讨论】:
-
您班级的路径不符合 PSR4 标准。看起来目录名称是
compiler,但应该是Compiler。 -
文件夹“compiler”的正确名称是“Compiler”。抱歉打错了。
-
发布类所在文件的确切路径名。无法理解您上面的图表。看起来该文件不在
Compiler内。 -
我不知道为什么,但是错误消失了。另一方面,我的解决方案不起作用,我没有得到参数: $container->setParameter('test', $setting);