如何使用类(由工厂服务返回)及其中一种方法来确定是否应显示链接?
我可以通过$this->render
方法轻松地注入它,但它是用于多个页面的链接,我必须将它注入到手动使用相同模板的许多控制器中。
我是否可以通过树枝模板访问工厂?
我想要使用的服务看起来像这样:
$factory = $this->get('somefactory');
$model = $factory->build('somemodel', new SomeClass()); //SomeClass() is the first parameter in $model's constructor
$model->returnsABoolean(); //Determines if link should be showed or not.
答案 0 :(得分:1)
制作树枝延伸,注入模型然后添加树枝功能来访问它。
namespace Cerad\Bundle\AppBundle\TwigExtension;
class AppExtension extends \Twig_Extension
{
protected $model;
public function getName() { return 'cerad_app_extension'; }
public function __construct($model)
{
$this->model = $model;
}
public function getFunctions()
{
return array(
'cerad_check_link' => new \Twig_Function_Method($this, 'checkLink'),
);
}
public function checkLink($link)
{
return $model->shouldLinkBeVisible($link);
}
}
services.yml:
cerad_app.twig_extension:
class: Cerad\Bundle\AppBundle\TwigExtension\AppExtension
arguments:
- '@model_or_factory_service_id'
tags:
- { name: twig.extension }
Twig模板:
{% if cerad_check_link(link) %}
{# Show it #}
{% endif %}
这一切都在文档中。