树枝模板内的异常处理
Posted
技术标签:
【中文标题】树枝模板内的异常处理【英文标题】:Exception handling inside twig template 【发布时间】:2015-12-02 14:53:00 【问题描述】:我是 symfony2 的新手。我的项目有两个实体
[1] Category and
[2] Evaluation
类别有很多评价,所以问题是当我删除类别然后显示评价时,它会显示错误,例如
"An exception has been thrown during the rendering of a template ("Entity was not found.") in HfAppBundle:SpecificEvaluations:index.html.twig at line 137. "
.
在第 137 行,这是内容 evaluation.category.name
。我也尝试过
% if evaluation.category.name is not null %
evaluation.category.name
% endif %
但它也给了我同样的错误。 有谁可以帮忙?
谢谢
【问题讨论】:
如果仅当您调用 getter 方法时,在未找到实体时难以捕获从原则中引发的异常。尝试在config.yml
中更改树枝环境variables debug=false
和strict_variables=false
,查看文档以获取更多详细信息here
【参考方案1】:
试试default
过滤器:
evaluation.category.name|default('[No name]')
【讨论】:
【参考方案2】:使用树枝测试defined:
% if evaluation.category.name is defined %
evaluation.category.name
% endif %
【讨论】:
为什么?没有设置category也没有报错,还需要什么? 当我写了这个然后它也给了我同样的错误 先检查evaluation.category is defined
【参考方案3】:
不是检查类别名称,而是检查与评估关联的类别是否存在。
% if evaluation.getCategory %
evaluation.category.name
% endif %
理想情况下,当您删除链接到多个评估的类别时,您应该删除已删除类别与评估之间的关系。
为此,指定在删除类别时是否删除所有评估,或者在删除类别时将所有相关评估的类别设置为空。 为此,在 yml 中,关系应定义为
manyToOne:
user:
targetEntity: LB\CoreBundle\Entity\User
joinColumn:
name: user_id
referencedColumnName: id
onDelete: "SET NULL"
onDelete 可以是“SET NULL”或“CASCADE”,具体取决于您是否需要将评估时的类别字段设置为 null 或删除与某个类别相关的所有评估。
修改您的代码以设置评估类别,如下所示。将类别设置为 null 后,您没有保留评估。
$evaluations = $em->getRepository('HfAppBundle:Evaluation')->findByCategory($catId);
foreach ($evaluations as $evl)
$evl->setCategory(null);
//this line was missing
$em->persist($evl);
$em->flush();
【讨论】:
我也尝试过这个解决方案,但它不起作用。它给了我同样的错误信息。 我已经修改了答案。可以试一试吗? 当我删除类别时,我手动将评估的 category_id 字段设置为空。 $evaluations = $em->getRepository('HfAppBundle:Evaluation')->findByCategory($catId); foreach ($evaluations as $evl) $evl->setCategory(null); $em->flush(); 但是当我获取评估时,我在 % if evaluation.category.name is defined % 我认为你在 for 循环中缺少$em->persist($evl);
。
我不知道,但它在 DB 中设置为 0,(因为我不允许 null)以上是关于树枝模板内的异常处理的主要内容,如果未能解决你的问题,请参考以下文章