将实体中的值返回到symfony中的视图文件

时间:2014-01-17 11:31:59

标签: symfony

我想从实体返回一个值到视图文件。以下是我的实体功能

public function getVisitorName($id)
    {

    $repository = $this->getDoctrine()->getRepository('SystemVmsBundle:VisitorsDetails');
    $product = $repository->findOneBy(array('id' =>$id));
    $name=$product->getFirstname();
      return $name;
}

这是我视图文件中调用该函数的行

<a href="{{ path('visitorsdetails_show', { 'id': entity.visitorId}) }}">{{ entity.visitorName(entity.visitorId) }}</a>

它没有给我任何错误。但只是一个空白页面。我该如何解决这个问题?

这是我的控制器代码

public function indexAction()
{
    $em = $this->getDoctrine()->getManager();

    $entities = $em->getRepository('SystemVmsBundle:EntryDetails')->findAll();

    return array(
        'entities' => $entities,
    );
}

我正在尝试获取与访问者ID相对应的访问者名称(来自访问者表)(在条目表中)。那我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

你有两种方法:

1)通过向EntryDetails添加字段详细信息,将SystemVmsBundle:EntryDetails实体映射到SystemVmsBundle:VisitorsDetails as OntToOne; ,然后在twig模板中通过

调用它
{{ entity.details.name }}

2)不要创建getVisitorName(),最好为此创建twig function,具有相同的功能。

答案 1 :(得分:0)

您的indexAction()没有返回响应对象,它只是返回一个实体数组。控制器动作应该返回一个包含要显示的html的Response(除非它们用于例如来自javascript的ajax调用)。如果您正在使用twig模板,则可以使用控制器render()方法创建响应,如下所示:

        return $this->render('<YourBundle>:<YourViewsFolder>:<YourView>.html.twig', array(
            'entities' => $entities,
        ));

如果你已经纠正了我怀疑你会收到错误,因为$ this-&gt; getDoctrine()将无法从实体类中运行。您在getVisitorName()方法中拥有的代码不应该在实体类中。

正如@pomaxa已经建议的那样,我相信你的EntryDetails和VisitorsDetails实体之间应该存在关系,尽管我对这个问题的数据知之甚少,不知道它应该是什么类型的关系(OneToOne / ManyToOne) 。如果您的EntryDetails实体与VisitorsDetails有关系,那么EntryDetails类将包含$ visitorsDetails属性和获取/设置它的方法。然后你的twig文件中的行看起来像这样:

<a href="{{ path('visitorsdetails_show', { 'id': entity.visitorId}) }}">{{ entity.visitorsDetails.firstName }}</a>

Symfony手册中有Entity Relationships / Associations部分。

另外,我希望你不介意我给你一些建议:

  1. 复制并粘贴代码时要小心,因为您在getVisitorName()中看到了这一点。虽然系统中没有产品,但您保留了变量名称'$ product'。这种事情可能会导致错误并使代码更难维护。
  2. 我建议你不要在实体名称的末尾添加“详细信息”,除非你真的有两个独立的相关实体,例如Visitor + VisitorDetails,这是一个很好的理由。我认为您示例中的实体实际上是“访客”和“VistorEntry”。
  3. 除非您正在编写可重复使用的组件,否则我建议您在控制器和树枝中使用特定的变量名称,例如'$ visitorEntries'而不是'$ entities'。
  4. 通常,变量名称越有意义,代码就越可读,可维护且无错误。随后,SO上的人也可以更容易地理解您的代码,并在您需要时为您提供帮助。