From 5d276345aa8fc6eefed3793d59cc73ae0d0247b5 Mon Sep 17 00:00:00 2001 From: "godzilla80@gmx.net" <> Date: Sun, 10 May 2009 10:51:52 +0000 Subject: Fixed Issue #74 Introduce a new property 'InvalidFinderResult' (related new enum TActiveRecordInvalidFinderResult) to TActiveRecordConfig, TActiveRecordManager, TActiveRecord that allows to control how TActiveRecord react if an invalid magic-finder invoked. Possible values are: Exception - throw TActiveRecordException like before rev1545 Null - return null (default for backward compatibility reasons) To change behavior: or MyActiveRecord->setInvalidFinderResult(TActiveRecordInvalidFinderResult::Exception); or override MyActiveRecord->getInvalidFinderResult() to always return TActiveRecordInvalidFinderResult::Exception --- framework/Data/ActiveRecord/TActiveRecord.php | 68 ++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) (limited to 'framework/Data/ActiveRecord/TActiveRecord.php') diff --git a/framework/Data/ActiveRecord/TActiveRecord.php b/framework/Data/ActiveRecord/TActiveRecord.php index 24227586..9ec1a4b3 100644 --- a/framework/Data/ActiveRecord/TActiveRecord.php +++ b/framework/Data/ActiveRecord/TActiveRecord.php @@ -1,6 +1,6 @@ * @link http://www.pradosoft.com/ @@ -189,6 +189,15 @@ abstract class TActiveRecord extends TComponent */ protected $_connection; // use protected so that serialization is fine + + /** + * Defaults to 'null' + * + * @var TActiveRecordInvalidFinderResult + * @since 3.1.5 + */ + private $_invalidFinderResult = null; + /** * Prevent __call() method creating __sleep() when serializing. */ @@ -829,7 +838,12 @@ abstract class TActiveRecord extends TComponent else if($delete=strncasecmp($method,'deleteallby',11)===0) $condition = $method[11]==='_' ? substr($method,12) : substr($method,11); else - return null;//throw new TActiveRecordException('ar_invalid_finder_method',$method); + { + if($this->getInvalidFinderResult() == TActiveRecordInvalidFinderResult::Exception) + throw new TActiveRecordException('ar_invalid_finder_method',$method); + else + return null; + } $criteria = $this->getRecordGateway()->getCommand($this)->createCriteriaFromString($method, $condition, $args); if($delete) @@ -838,6 +852,34 @@ abstract class TActiveRecord extends TComponent return $findOne ? $this->find($criteria) : $this->findAll($criteria); } + /** + * @return TActiveRecordInvalidFinderResult Defaults to '{@link TActiveRecordInvalidFinderResult::Null Null}'. + * @see TActiveRecordManager::getInvalidFinderResult + * @since 3.1.5 + */ + public function getInvalidFinderResult() + { + if($this->_invalidFinderResult !== null) + return $this->_invalidFinderResult; + + return self::getRecordManager()->getInvalidFinderResult(); + } + + /** + * Define the way an active record finder react if an invalid magic-finder invoked + * + * @param TActiveRecordInvalidFinderResult|null + * @see TActiveRecordManager::setInvalidFinderResult + * @since 3.1.5 + */ + public function setInvalidFinderResult($value) + { + if($value === null) + $this->_invalidFinderResult = null; + else + $this->_invalidFinderResult = TPropertyValue::ensureEnum($value, 'TActiveRecordInvalidFinderResult'); + } + /** * Create a new TSqlCriteria object from a string $criteria. The $args * are additional parameters and are used in place of the $parameters @@ -1021,3 +1063,25 @@ class TActiveRecordChangeEventParameter extends TEventParameter } } +/** + * TActiveRecordInvalidFinderResult class. + * TActiveRecordInvalidFinderResult defines the enumerable type for possible results + * if an invalid {@link TActiveRecord::__call magic-finder} invoked. + * + * The following enumerable values are defined: + * - Null: return null (default) + * - Exception: throws a TActiveRecordException + * + * @author Yves Berkholz + * @version $Id$ + * @package System.Data.ActiveRecord + * @see TActiveRecordManager::setInvalidFinderResult + * @see TActiveRecordConfig::setInvalidFinderResult + * @see TActiveRecord::setInvalidFinderResult + * @since 3.1.5 + */ +class TActiveRecordInvalidFinderResult extends TEnumerable +{ + const Null = 'Null'; + const Exception = 'Exception'; +} -- cgit v1.2.3