gpt4 book ai didi

php - 如何从数据库加载 Symfony 的配置参数 (Doctrine)

转载 作者:行者123 更新时间:2023-12-03 01:15:58 26 4
gpt4 key购买 nike

我尝试从数据库加载它们,而不是在 parameters.yml 中对参数进行硬编码。并不是parameters.yml中的所有参数都需要从数据库加载,只是少数,比如paypal的api详细信息

config.yml中,我导入了parameters.php

imports:
- { resource: parameters.php }

如果我在 parameters.php 中添加静态信息(如下所示),则效果很好

$demoName = 'First Last';
$container->setParameter('demoName', $demoName);

但是我无法从数据库表中获取信息。我认为我应该创建类并使用 $em = this->getDoctrine()->getManager(); 它应该可以工作,但它不会,我收到错误

注意: undefined variable :/opt/lampp/htdocs/services/app/config/parameters.php 中的 paypal_data(从“/opt/lampp/htdocs/services/app/config/config 导入”) .yml”)。

这是我所做的尝试,如下所示,但代码似乎没有进入__construct()

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Doctrine\Bundle\DoctrineBundle\Registry;
use Doctrine\ORM\Mapping as ORM;

class parameters extends Controller
{
public $paypal_data;

function __construct() {
$this->indexAction();
}

public function indexAction(){

$em = $this->getDoctrine()->getManager();
$this->paypal_data = $em->getRepository('featureBundle:paymentGateways')->findAll();

}

}
$demoName = 'First Last';
$container->setParameter('demoName', $demoName);
$container->setParameter('paypal_data', $this->paypal_data);

任何帮助将不胜感激。

最佳答案

你做错事了。您需要声明您的 CompilerPass 并将其添加到容器中。整个容器加载后...在编译时您将可以访问其中的所有服务。

只需获取实体管理器服务并查询所需的参数并将它们注册到容器中即可。

分步说明:

  • 定义编译器阶段:

    # src/Acme/YourBundle/DependencyInjection/Compiler/ParametersCompilerPass.php
    class ParametersCompilerPass implements CompilerPassInterface
    {
    public function process(ContainerBuilder $container)
    {
    $em = $container->get('doctrine.orm.default_entity_manager');
    $paypal_params = $em->getRepository('featureBundle:paymentGateways')->findAll();
    $container->setParameter('paypal_data', $paypal_params);
    }
    }
  • 在包定义类中,您需要将编译器传递添加到容器

    # src/Acme/YourBundle/AcmeYourBundle.php
    class AcmeYourBundle extends Bundle
    {
    public function build(ContainerBuilder $container)
    {
    parent::build($container);

    $container->addCompilerPass(new ParametersCompilerPass(), PassConfig::TYPE_AFTER_REMOVING);
    }
    }

关于php - 如何从数据库加载 Symfony 的配置参数 (Doctrine),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28713495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com