PHP / Symfony2 - 对象上的print_r

时间:2015-02-19 10:57:20

标签: php ajax symfony

我有一些奇怪的事情发生,我想知道它们是PHP还是Symfony相关。基本上,从我的表单中,发出ajax请求并将表单数据发布到我的控制器。

现在我需要对刚刚持久存储到数据库的实体做一些工作,所以为了得到它需要去的地方,我有一个EventListener而且我做

protected  $alertEntity;

public function postPersist(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
    if ($entity instanceof AvailabilityAlert) {
        $this->alertEntity = $entity;
    }
}

public function postFlush(PostFlushEventArgs $args)
{
    $this->api_service->addFlightsAction($this->alertEntity);
}

所以我在postPersist中获取实体,然后将其传递到postFlush中需要的位置。

这很好,这里没问题。奇怪的是这个

public function addFlightsAction($alert){
    print_r($alert);
}

如果我在print_r中有上述内容,它会一直持续到最终导致错误分配大小溢出为止。

如果我在var_dump中执行上述操作,它会为我打印警报,但其格式不可读,例如: (短提取物)

<pre class='xdebug-var-dump' dir='ltr'>
<b>object</b>(<i>Ontro\AlertBundle\Entity\AvailabilityAlert</i>)[<i>284</i>]
  <i>private</i> 'id' <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>39</font>
  <i>private</i> 'searchCommand' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'A20APRLONLAX'</font> <i>(length=12)</i>
  <i>private</i> 'isConnecting' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'no'</font> <i>(length=2)</i>
  <i>private</i> 'lastUpdated' <font color='#888a85'>=&gt;</font> 
    <b>object</b>(<i>DateTime</i>)[<i>288</i>]
      <i>public</i> 'date' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'2015-02-19 10:54:54'</font> <i>(length=19)</i>
      <i>public</i> 'timezone_type' <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>3</font>
      <i>public</i> 'timezone' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'Europe/London'</font> <i>(length=13)</i>
  <i>private</i> 'isDeleted' <font color='#888a85'>=&gt;</font> <small>int</small> <font color='#4e9a06'>0</font>
  <i>private</i> 'alertStatus' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'Active'</font> <i>(length=6)</i>
  <i>private</i> 'bookingClass' <font color='#888a85'>=&gt;</font> 
    <b>object</b>(<i>Doctrine\ORM\PersistentCollection</i>)[<i>372</i>]
      <i>private</i> 'snapshot' <font color='#888a85'>=&gt;</font> 

那为什么会这样呢?有什么方法可以很好地打印出来,所以我可以看到它吗?只要它摆脱了所有的html标签,我不介意上面的输出。

由于

1 个答案:

答案 0 :(得分:4)

你有xdebug install,它为你格式化var_dump。请按照here说明禁用它,但仍然会出现与print_r相同的分配错误问题。

如果你想保留xdebug(我想你应该这样做,而且应该),你有两个选项,你可以在你的php.ini中禁用xdebug.overload_var_dumpdocs),或者你可以使用{{1相反。

在Symfony 2.6中,他们引入了一个新功能VarDumper,这是一个非常强大的调试工具。您可以在此处查看文档:{​​{3}}