symfony2中基于模型的动态链接

时间:2014-06-04 21:07:25

标签: symfony twig

如何使用类(由工厂服务返回)及其中一种方法来确定是否应显示链接?

我可以通过$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.

1 个答案:

答案 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 %}

这一切都在文档中。