如何在symfony2框架中处理实体内部的异常

如何在symfony2框架中处理实体内部的异常,symfony,exception,doctrine-orm,try-catch,entity,Symfony,Exception,Doctrine Orm,Try Catch,Entity,我想从实体类中获取一些数据。我尝试使用try/catch来处理问题,但它不起作用(仍然会显示异常屏幕) 错误:对中的非对象调用成员函数getGroup() /var/www/html/system/src/Project/SomeBundle/Entity/MyEntity.php行 139 500内部服务器错误-FatalErrorException堆栈跟踪 我如何在实体中执行类似的操作 代码/实体: <?php namespace Project\SomeBundle\Entity;

我想从实体类中获取一些数据。我尝试使用try/catch来处理问题,但它不起作用(仍然会显示异常屏幕)

错误:对中的非对象调用成员函数getGroup() /var/www/html/system/src/Project/SomeBundle/Entity/MyEntity.php行 139 500内部服务器错误-FatalErrorException堆栈跟踪

我如何在实体中执行类似的操作

代码/实体:

<?php
namespace Project\SomeBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * MyEntity
 *
 * @ORM\Table(name="my_entity")
 * @ORM\Entity(repositoryClass="Project\SomeBundle\Entity\Repository\MyEntityRepository")
 */
class MyEntity
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     * @Assert\Length(max="255")
     */
    private $name;

    /**
     * @var Item[]|Collection
     *
     * @ORM\OneToMany(targetEntity="Project\SomeBundle\Entity\Item", mappedBy="itemType", cascade={"remove"}, fetch="EXTRA_LAZY")
     */
    protected $items;

    // [...]


    /**
     * Get some data
     *
     * @return string
     */
    public function getSomeData()
    {
        $result = null;
        try {
            $result = $this->getName() . ' - ' . $this->getItems()->last()->getGroup()->getCode();
        }
        catch(\Exception $exception) {
            $result = $this->getName();

            $logFile = fopen('/tmp/error.log', 'a');
            fwrite($logFile, $exception->getMessage());
            fclose($logFile);
        }

        return $result;
    }
}

错误消息
错误:对…
中的非对象调用成员函数getGroup(),与接收它的位置关系不大。这意味着您正试图对非对象的对象调用函数

似乎
$this->getItems()->last()
以某种方式返回了
null
(因为没有项目),然后您调用了
getGroup()
,它是一个非对象


尝试调试要调用的对象
getGroup()
,并在调用之前查看它的值。

如果要捕获该错误,必须按如下所示编写Try-catch

    try {
        $result = $this->getName() . ' - ' . $this->getItems()->last()->getGroup()->getCode();
    }
    catch(\Symfony\Component\Debug\Exception\FatalErrorException $exception) {
        $result = $this->getName();

        $logFile = fopen('/tmp/error.log', 'a');
        fwrite($logFile, $exception->getMessage());
        fclose($logFile);
    }

您可以看到我已将上述代码块中的\Exception更改为\Symfony\Component\Debug\Exception\FatalErrorException,谢谢。错误来自:[……]->last()->getGroup()->getCode()。。。是的,原因是“last()”返回“false”,所以“getGroup()”失败。我的问题是,为什么程序没有在try/catch中捕获异常?啊,对不起。是的,这很奇怪。您是否可以尝试显式捕获
FatalErrorException
而不是
\Exception
?这应该不是必需的,因为FatalErrorException扩展了\Exception。@Denes,您必须确认$Exception对象的类谢谢,但它不起作用。有人说FatalErrorException是不可捕获的。PHP7使捕获此类内容变得更容易。谢谢大家,但我最终放弃了它,并完全重写了我的代码。您在实体中不会这样做。无论你在哪里调用
getSomeData()