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