Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以在Doctrine#u Record';邮政';钩子?_Php_Doctrine - Fatal编程技术网

Php 是否可以在Doctrine#u Record';邮政';钩子?

Php 是否可以在Doctrine#u Record';邮政';钩子?,php,doctrine,Php,Doctrine,是否可以从各种Doctrine_记录“post”挂钩中回滚整个事务?即从postInsert()、postpdate()和postSave()等内部 我使用的是Doctrine 1.2,从文档和API来看,不清楚如何做到这一点。通过文档查看,很明显Doctrine\u事件是最好的起点,因为它已传递到事件处理程序中。本质上,您必须(通过getInvoker())获取Doctrine_连接对象,然后尝试调用它的回滚 唯一的问题是getInvoker返回几种类型的对象中的一种,我不确定它们是否都支持回

是否可以从各种Doctrine_记录“post”挂钩中回滚整个事务?即从postInsert()、postpdate()和postSave()等内部


我使用的是Doctrine 1.2,从文档和API来看,不清楚如何做到这一点。

通过文档查看,很明显Doctrine\u事件是最好的起点,因为它已传递到事件处理程序中。本质上,您必须(通过getInvoker())获取Doctrine_连接对象,然后尝试调用它的回滚

唯一的问题是getInvoker返回几种类型的对象中的一种,我不确定它们是否都支持回滚方法,因此您可能需要一些条件逻辑来确定是否可以从所有对象回滚,以及如何针对不同的情况回滚

/**
 * getInvoker
 * returns the handler that invoked this event
 *
 * @return Doctrine_Connection|Doctrine_Connection_Statement|
 *         Doctrine_Connection_UnitOfWork|Doctrine_Transaction   the handler that invoked this event
 */
public function getInvoker()
{
    return $this->_invoker;
}
该文档展示了如何通过a\U连接开始、提交和回滚,因此这应该是最简单的起点。因此,侦听器看起来像:

class BlogPost extends Doctrine_Record
{
    public function postUpdate( $event )
    {
        $invoker = $event->getInvoker();
        switch(get_class($invoker)) {
            case 'Doctrine_Connection':
                $invoker->rollbakck();
                break;
            case 'Doctrine_Connection_Statement':
            case 'Doctrine_Collection_UnitOfWork':
            case 'Doctrine_Transaction':
                // todo can we rollback from these ?
                // if so figure out how :)
        }
    }
}