mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-09-09 13:02:40 +00:00
Binding additional Behavior callbacks to Model
git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@4108 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
eeec18d562
commit
982381dc74
2 changed files with 88 additions and 11 deletions
|
@ -29,19 +29,42 @@
|
||||||
*/
|
*/
|
||||||
class ModelBehavior extends Object {
|
class ModelBehavior extends Object {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contains configuration settings for use with individual model objects. This
|
||||||
|
* is used because if multiple models use this Behavior, each will use the same
|
||||||
|
* object instance. Individual model settings should be stored as an
|
||||||
|
* associative array, keyed off of the model name.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
var $settings = array();
|
||||||
|
/**
|
||||||
|
* Allows the mapping of preg-compatible regular expressions to public or
|
||||||
|
* private methods in this class, where the array key is a /-delimited regular
|
||||||
|
* expression, and the value is a class method. Similar to the functionality of
|
||||||
|
* the findBy* / findAllBy* magic methods.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
var $mapMethods = array();
|
var $mapMethods = array();
|
||||||
|
|
||||||
function setup(&$model, $config = array()) { }
|
function setup(&$model, $config = array()) { }
|
||||||
|
|
||||||
function beforeFind(&$model, &$query) { }
|
function beforeFind(&$model, $query) { }
|
||||||
|
|
||||||
function afterFind(&$model, &$results, $primary) { }
|
function afterFind(&$model, $results, $primary) { }
|
||||||
|
|
||||||
|
function beforeSave(&$model) { }
|
||||||
|
|
||||||
|
function afterSave(&$model) { }
|
||||||
|
|
||||||
function beforeDelete(&$model) { }
|
function beforeDelete(&$model) { }
|
||||||
|
|
||||||
function afterDelete(&$model) { }
|
function afterDelete(&$model) { }
|
||||||
|
|
||||||
function onError(&$model, &$error) { }
|
function onError(&$model, $error) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
|
@ -465,6 +465,7 @@ class Model extends Overloadable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$return = $db->query($method, $params, $this);
|
$return = $db->query($method, $params, $this);
|
||||||
|
|
||||||
if (!PHP5) {
|
if (!PHP5) {
|
||||||
if (isset($this->__backAssociation)) {
|
if (isset($this->__backAssociation)) {
|
||||||
$this->__resetAssociations();
|
$this->__resetAssociations();
|
||||||
|
@ -809,6 +810,15 @@ class Model extends Overloadable {
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
function hasField($name) {
|
function hasField($name) {
|
||||||
|
if (is_array($name)) {
|
||||||
|
foreach ($name as $n) {
|
||||||
|
if ($this->hasField($n)) {
|
||||||
|
return $n;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($this->_tableInfo)) {
|
if (empty($this->_tableInfo)) {
|
||||||
$this->loadInfo();
|
$this->loadInfo();
|
||||||
}
|
}
|
||||||
|
@ -939,6 +949,16 @@ class Model extends Overloadable {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($this->behaviors)) {
|
||||||
|
$behaviors = array_keys($this->behaviors);
|
||||||
|
$ct = count($behaviors);
|
||||||
|
for ($i = 0; $i < $ct; $i++) {
|
||||||
|
if ($this->behaviors[$behaviors[$i]]->beforeSave($this) === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!$this->beforeSave()) {
|
if (!$this->beforeSave()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1030,6 +1050,13 @@ class Model extends Overloadable {
|
||||||
$this->__saveMulti($joined, $this->id);
|
$this->__saveMulti($joined, $this->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($this->behaviors)) {
|
||||||
|
$behaviors = array_keys($this->behaviors);
|
||||||
|
$ct = count($behaviors);
|
||||||
|
for ($i = 0; $i < $ct; $i++) {
|
||||||
|
$this->behaviors[$behaviors[$i]]->afterSave($this);
|
||||||
|
}
|
||||||
|
}
|
||||||
$this->afterSave();
|
$this->afterSave();
|
||||||
$this->data = false;
|
$this->data = false;
|
||||||
$this->_clearCache();
|
$this->_clearCache();
|
||||||
|
@ -1133,10 +1160,27 @@ class Model extends Overloadable {
|
||||||
if ($this->exists() && $this->beforeDelete()) {
|
if ($this->exists() && $this->beforeDelete()) {
|
||||||
$db =& ConnectionManager::getDataSource($this->useDbConfig);
|
$db =& ConnectionManager::getDataSource($this->useDbConfig);
|
||||||
|
|
||||||
if ($this->id && $db->delete($this)) {
|
if (!empty($this->behaviors)) {
|
||||||
|
$behaviors = array_keys($this->behaviors);
|
||||||
|
$ct = count($behaviors);
|
||||||
|
for ($i = 0; $i < $ct; $i++) {
|
||||||
|
if ($this->behaviors[$behaviors[$i]]->beforeDelete($this) === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($db->delete($this)) {
|
||||||
$this->_deleteMulti($this->id);
|
$this->_deleteMulti($this->id);
|
||||||
$this->_deleteHasMany($this->id, $cascade);
|
$this->_deleteHasMany($this->id, $cascade);
|
||||||
$this->_deleteHasOne($this->id, $cascade);
|
$this->_deleteHasOne($this->id, $cascade);
|
||||||
|
if (!empty($this->behaviors)) {
|
||||||
|
for ($i = 0; $i < $ct; $i++) {
|
||||||
|
if ($this->behaviors[$behaviors[$i]]->afterDelete($this) === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
$this->afterDelete();
|
$this->afterDelete();
|
||||||
$this->_clearCache();
|
$this->_clearCache();
|
||||||
$this->id = false;
|
$this->id = false;
|
||||||
|
@ -1323,14 +1367,22 @@ class Model extends Overloadable {
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!empty($this->behaviors)) {
|
if (!empty($this->behaviors)) {
|
||||||
$b = array_keys($this->behaviors);
|
$behaviors = array_keys($this->behaviors);
|
||||||
$c = count($b);
|
$ct = count($behaviors);
|
||||||
for ($i = 0; $i < $c; $i++) {
|
for ($i = 0; $i < $ct; $i++) {
|
||||||
$this->behaviors[$b[$i]]->beforeFind($this, $queryData);
|
$ret = $this->behaviors[$behaviors[$i]]->beforeFind($this, $queryData);
|
||||||
|
if (is_array($ret)) {
|
||||||
|
$queryData = $ret;
|
||||||
|
} elseif ($ret === false) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->beforeFind($queryData)) {
|
$ret = $this->beforeFind($queryData);
|
||||||
|
if (is_array($ret)) {
|
||||||
|
$queryData = $ret;
|
||||||
|
} elseif ($ret === false) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1340,10 +1392,12 @@ class Model extends Overloadable {
|
||||||
$b = array_keys($this->behaviors);
|
$b = array_keys($this->behaviors);
|
||||||
$c = count($b);
|
$c = count($b);
|
||||||
for ($i = 0; $i < $c; $i++) {
|
for ($i = 0; $i < $c; $i++) {
|
||||||
$this->behaviors[$b[$i]]->afterFind($this, $results, true);
|
$ret = $this->behaviors[$b[$i]]->afterFind($this, $results, true);
|
||||||
|
if (is_array($ret)) {
|
||||||
|
$results = $ret;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$return = $this->afterFind($results, true);
|
$return = $this->afterFind($results, true);
|
||||||
|
|
||||||
if (isset($this->__backAssociation)) {
|
if (isset($this->__backAssociation)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue