我想从实体返回一个值到视图文件。以下是我的实体功能
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相对应的访问者名称(来自访问者表)(在条目表中)。那我该怎么做呢?
答案 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部分。
另外,我希望你不介意我给你一些建议:
通常,变量名称越有意义,代码就越可读,可维护且无错误。随后,SO上的人也可以更容易地理解您的代码,并在您需要时为您提供帮助。