树枝模板内的异常处理

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=falsestrict_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)

以上是关于树枝模板内的异常处理的主要内容,如果未能解决你的问题,请参考以下文章

DRF框架中的异常处理程序

Spring - Thymeleaf:异常处理模板

模板与异常处理

Symfony 错误:“在渲染模板期间引发了异常”

Java-异常处理

异常处理——java基础