【问题标题】: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

标签: symfony exception twig relation


【解决方案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)
    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多