Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
Orm 当侦听器仅连接一次时,条令模型实例触发记录侦听器两次_Orm_Doctrine 1.2_Php - Fatal编程技术网

Orm 当侦听器仅连接一次时,条令模型实例触发记录侦听器两次

Orm 当侦听器仅连接一次时,条令模型实例触发记录侦听器两次,orm,doctrine-1.2,php,Orm,Doctrine 1.2,Php,我遇到了一个奇怪的问题,每当我创建(比如说用户)模型的实例并附加一个记录侦听器时,侦听器都会被调用多次(除了第一次,超时)。有人知道为什么会这样吗 顺便说一句,我在我的CLI应用程序中使用了条令,当请求完成时,对象不会消失。在挖掘条令源代码后,我学到了这一点。侦听器附加到表实例,而不是模型的单个实例。因此,当侦听器附加到模型时,它会在内部将其传递给表实例。因此,即使使用新的模型实例,如果附加新的侦听器实例,两个侦听器都将被调用 也许,下面的例子有助于理解这个问题 //走错了路 foreach($

我遇到了一个奇怪的问题,每当我创建(比如说用户)模型的实例并附加一个记录侦听器时,侦听器都会被调用多次(除了第一次,超时)。有人知道为什么会这样吗


顺便说一句,我在我的CLI应用程序中使用了条令,当请求完成时,对象不会消失。

在挖掘条令源代码后,我学到了这一点。侦听器附加到表实例,而不是模型的单个实例。因此,当侦听器附加到模型时,它会在内部将其传递给表实例。因此,即使使用新的模型实例,如果附加新的侦听器实例,两个侦听器都将被调用

也许,下面的例子有助于理解这个问题

//走错了路
foreach($记录为$记录){
//表返回模型用户的实例
$model=model\u UserTable::getInstance()->make($record);
$listener=新原则\u listener\u SomeListener();
//下面将为每个模型实例附加新的侦听器
$model->addListener($listener);
$model->save();
}
上述操作将导致每个
$record
都有一个
侦听器
附加到
实例。然而,若监听器只应该被调用一次,那个么这里是你们需要如何做到这一点的

// RIGHT WAY
$listener = new Doctrine_Listener_SomeListener();
$table = Model_UserTable::getInstance();
$table->addRecordListener( $listener ); // approach #1

foreach ($records as $record) {
    $model = $table->make( $record );
    $model->addListener( $listener ); // approach #2
    $model->save();
}
注意:使用这两种方法中的任何一种