gpt4 book ai didi

php - Twig 过滤器/扩展中的 Symfony2 : How to get container parameters from parameters. yml?

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

我有文件 parameters.yml :

parameters:
............
image_news_url: http://image.dev/news/

现在在我的包中我创建了一个新的 Twig 扩展:

// src/DesktopBundle/Twig/AppExtension.php

namespace App\DesktopBundle\Twig;

use Symfony\Component\DependencyInjection\ContainerBuilder;

class AppExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('get_image', array($this, 'getImage')),
);
}

public function getImage($domen, $image_id)
{
$o_container = new ContainerBuilder();

switch($domen){
case 'news':
return sprintf('%s%s',$o_container->getParameter('image_news_url'),$image_id.'.slide.jpg');
break;
}
}

public function getName()
{
return 'app_extension';
}

}我有一个错误:你请求了一个不存在的参数“image_news_url。你能帮我吗?我不明白为什么我不能访问 parameters.yml。提前致谢对不起我的英语

最佳答案

问题是由于您尝试自己构建容器造成的。

$o_container = new ContainerBuilder();

这是错误的。

如果你想访问它,你只需要将容器注入(inject)你的扩展。

配置

services:

# [..]

your.twig_extension:
class: Your\Namespace\YourExtension
public: false
arguments: [ "@service_container" ]
tags:
- { name: twig.extension }

use Symfony\Component\DependencyInjection\ContainerInterface;

namespace Your\Namespace;

class YourExtension
{
/** @var ContainerInterface */
protected $container;

/** @param ContainerInterface $container */
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}

/** @return string */
function getImage()
{
// some logic here

return $this->container->getParameter('image_news_url');
}

我假设您想应用一些附加逻辑来选择扩展中的参数。否则你可以简单地:

  • 只注入(inject)参数本身 %image_news_url%
  • 使用twig.globals 配置指令

文档章节中有一个示例 Using Service Container Parameters .

app/config/parameters.yml

image_news_url: "http://some-url.tld"

app/config/config.yml

twig:
globals:
image_news_url: %image_news_url%

模板

{{ image_news_url }}

关于php - Twig 过滤器/扩展中的 Symfony2 : How to get container parameters from parameters. yml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36263611/

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