是否可以从symfony2中的视图(php模板)调用实体

时间:2015-04-28 06:28:50

标签: symfony symfony-2.6

我在布局中获得了一个动态内容,它从数据库中获取值。实现此目的的最佳方法是什么,而不是从控制器传递值。

是否可以从视图中调用实体?我正在使用php模板。

2 个答案:

答案 0 :(得分:2)

MVC上下文中没有使用控制器来调用模型实体是没有意义的,至少你可以使用对控制器的ajax调用来获取更新的内容,该控制器返回JsonResponse到避免页面刷新

答案 1 :(得分:1)

这可以通过树枝延伸来实现。

注册枝条扩展名 TWIG EXTENSION

传递给__constructor() - @doctrine服务

services.yml

   my.twig.extension:
      class: twig\namespace\path
      arguments:
          kernel: "@kernel"
          doctrine: "@doctrine"
      tags:
        - { name: twig.extension }

Constructor of the new twig extension

protected $kernel;
protected $doctrine;

public function __construct($kernel, $doctrine)
{
  $this->kernel   = $kernel;
  $this->doctrine = $doctrine;
}

写一些方法:

/** @var string $repository. Example: AppBundle:Product' */
public function myEntity($repository)
{
  $manager = $this->doctrine->getManager();
  return $manager->getRepository($repository);
}

在twig扩展名中注册myEntity方法:

public function getFunctions()
{
    return array(
        'myEntity' =>  new \Twig_Function_Method($this, 'myEntity'),

    );
}

现在,在您的twig模板中,您可以访问任何存储库:

For example:

{# 
    myEntity('SomeBundle:coolEntity').find()
    myEntity('SomeBundle:coolEntity').findAll()
    myEntity('SomeBundle:coolEntity').findBy()
    ...
#}
{% for item in myEntity('SomeBundle:coolEntity').findAll() %}
  {{ item.getId() }}
{% endfor %}