0

如何在 Symfony 中跨视图共享对象?

我在我的实体中实现了 Serializable 类,以便可以将对象存储在会话中。然而,由于我的实体包含抽象方法,我需要在我的类中实现可序列化方法,我相信这将是我最后的手段。

在那之前,我想找到一个替代解决方案,而不是将对象存储在我的数据库中的临时表中(这与不做任何事情完全相同,因为我需要在每个显示视图的控制器中调用数据库)

这是我的场景:

我有两个文件:layout.html.twigsidebar.html.twig

我的 DefaultController 中有一个名为buildSidebar()如下所示的方法

public function buildSidebar($userId = 0) {
    $projects = $this->getDoctrine()->getRepository('SuperBundle:Projects')->findBy(array('userId' => $userId), array('cratedDate' => DESC), 10);
    return $this->render(
            'SuperBundle:sidebar.html.twig',
            array('projects' => $projects)
    );
}

然后在我的layout.html.twig文件中,我在第 77 行有以下代码块:

{% render controller("SuperBundle:Default:buildSidebar", {'userId': 37})  %}

当我测试它时,symfony 抛出一个异常说:

function controller doesn't exist in SuperBundle::layout.html.twig in line 77

我也尝试以这种方式嵌入控制器:

{{ render(controller("SuperBundle:Default:buildSidebar", {'userId': 37}) }}

此方法抛出异常unexpected name of value controller

{{ render controller("SuperBundle:Default:buildSidebar", {'userId': 37}) }}

我也尝试过这种方式,结果相同function controller does not exist

{% render(controller("SuperBundle:Default:buildSidebar", {'userId': 37}) %}

我错过了什么?我遵循了 Symfony 的文档,但其中也没有任何帮助。

4

1 回答 1

3

是的,您可以通过树枝扩展访问服务。 http://symfony.com/doc/current/cookbook/template/twig_extension.html

<?php

namespace You\UserBundle\Twig;

use Symfony\Component\Security\Core\SecurityContext;


class YourExtension extends \Twig_Extension
{

    protected $doctrine;

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


    public function getUsers()
    {
        $em = $this->doctrine->getManager();
        $result = $em
            ->getRepository('yourEntity')->findAll();
        return $result;
    }

    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('get_users', array($this, 'getUsers'))
        );
    }

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

}

或者您可以在树枝视图中包含一个控制器,例如:

        {{ render(controller('YourUserBundle:YourController:youraction')) }}

来源:http ://symfony.com/blog/new-in-symfony-2-2-the-new-fragment-sub-framework

于 2013-07-31T16:14:17.930 回答