Merge remote branch 'mridgway/DDC-696' into DDC-696
This commit is contained in:
commit
36985ee704
54
lib/Doctrine/ORM/Event/OnClearEventArgs.php
Normal file
54
lib/Doctrine/ORM/Event/OnClearEventArgs.php
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many individuals
|
||||||
|
* and is licensed under the LGPL. For more information, see
|
||||||
|
* <http://www.doctrine-project.org>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Doctrine\ORM\Event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides event arguments for the onClear event.
|
||||||
|
*
|
||||||
|
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||||
|
* @link www.doctrine-project.com
|
||||||
|
* @since 2.0
|
||||||
|
* @version $Revision$
|
||||||
|
* @author Roman Borschel <roman@code-factory.de>
|
||||||
|
* @author Benjamin Eberlei <kontakt@beberlei.de>
|
||||||
|
*/
|
||||||
|
class OnClearEventArgs extends \Doctrine\Common\EventArgs
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var \Doctrine\ORM\EntityManager
|
||||||
|
*/
|
||||||
|
private $em;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param \Doctrine\ORM\EntityManager $em
|
||||||
|
*/
|
||||||
|
public function __construct($em)
|
||||||
|
{
|
||||||
|
$this->em = $em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Doctrine\ORM\EntityManager
|
||||||
|
*/
|
||||||
|
public function getEntityManager()
|
||||||
|
{
|
||||||
|
return $this->em;
|
||||||
|
}
|
||||||
|
}
|
@ -119,4 +119,12 @@ final class Events
|
|||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
const onFlush = 'onFlush';
|
const onFlush = 'onFlush';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The onClear event occurs when the EntityManager#clear() operation is invoked,
|
||||||
|
* after all references to entities have been removed from the unit of work.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
const onClear = 'onClear';
|
||||||
}
|
}
|
@ -1790,6 +1790,10 @@ class UnitOfWork implements PropertyChangedListener
|
|||||||
if ($this->commitOrderCalculator !== null) {
|
if ($this->commitOrderCalculator !== null) {
|
||||||
$this->commitOrderCalculator->clear();
|
$this->commitOrderCalculator->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->evm->hasListeners(Events::onClear)) {
|
||||||
|
$this->evm->dispatchEvent(Events::onClear, new Event\OnClearEventArgs($this->em));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -58,6 +58,7 @@ class AllTests
|
|||||||
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\DatabaseDriverTest');
|
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\DatabaseDriverTest');
|
||||||
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\PostgreSQLIdentityStrategyTest');
|
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\PostgreSQLIdentityStrategyTest');
|
||||||
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\ExtraLazyCollectionTest');
|
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\ExtraLazyCollectionTest');
|
||||||
|
$suite->addTestSuite('Doctrine\Tests\ORM\Functional\ClearEventTest');
|
||||||
|
|
||||||
$suite->addTest(Locking\AllTests::suite());
|
$suite->addTest(Locking\AllTests::suite());
|
||||||
$suite->addTest(Ticket\AllTests::suite());
|
$suite->addTest(Ticket\AllTests::suite());
|
||||||
|
40
tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php
Normal file
40
tests/Doctrine/Tests/ORM/Functional/ClearEventTest.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Doctrine\Tests\ORM\Functional;
|
||||||
|
|
||||||
|
use Doctrine\ORM\Event\OnClearEventArgs;
|
||||||
|
use Doctrine\ORM\Events;
|
||||||
|
|
||||||
|
require_once __DIR__ . '/../../TestInit.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ClearEventTest
|
||||||
|
*
|
||||||
|
* @author Michael Ridgway <mcridgway@gmail.com>
|
||||||
|
*/
|
||||||
|
class ClearEventTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||||
|
{
|
||||||
|
protected function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEventIsCalledOnClear()
|
||||||
|
{
|
||||||
|
$listener = new OnClearListener;
|
||||||
|
$this->_em->getEventManager()->addEventListener(Events::onClear, $listener);
|
||||||
|
|
||||||
|
$this->_em->clear();
|
||||||
|
|
||||||
|
$this->assertTrue($listener->called);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class OnClearListener
|
||||||
|
{
|
||||||
|
public $called = false;
|
||||||
|
|
||||||
|
public function onClear(OnClearEventArgs $args)
|
||||||
|
{
|
||||||
|
$this->called = true;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user