<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>CakePHP - Manual/Developing/Models/Callbacks</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks</link>
<description>History/revisions of CakePHP/Manual/Developing/Models/Callbacks</description>
<language>en-us</language>
<item>
<title>2009-03-01 19:09:48</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks/show?time=2009-03-01+19%3A09%3A48</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".manual.developing.models.callbacks" href="http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Callbacks&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks?time=2009-03-01+19%3A09%3A48">2009-03-01 19:09:48&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks">2009-03-01 19:10:16&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Если используете рекурсивный поиск и&amp;nbsp;при этом $primary = true, то&amp;nbsp;вы получите ошибку от&amp;nbsp;PHP &lt;br />
&amp;#147;Cannot use&amp;nbsp;string offset as&amp;nbsp;an array&amp;#148;&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Если используете рекурсивный поиск и&amp;nbsp;при этом $primary = true, то&amp;nbsp;вы получите ошибку от&amp;nbsp;PHP &amp;#147;Cannot use&amp;nbsp;string offset as&amp;nbsp;an array&amp;#148;&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-03-01 18:32:02</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks/show?time=2009-03-01+18%3A32%3A02</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Callbacks&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks?time=2009-03-01+18%3A32%3A02">2009-03-01 18:32:02&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks?time=2009-03-01+19%3A09%3A48">2009-03-01 19:09:48&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent"> &lt;strong>afterFind(array $results, bool $primary)&lt;/strong>&lt;/div>
Если используете рекурсивный поиск и&amp;nbsp;при этом $primary = true, то&amp;nbsp;вы получите ошибку от&amp;nbsp;PHP &amp;#147;Cannot use&amp;nbsp;string offset as&amp;nbsp;an array&amp;#148;&lt;br />
Ниже показано, как&amp;nbsp;afterFind может быть использован для&amp;nbsp;форматирования даты.&lt;br />
function afterFind($results) {&lt;br />
&lt;div class="indent">foreach ($results as $key =&amp;gt; $val) {&lt;br />
&lt;div class="indent">if (isset($val['Event']['begindate'])) {&lt;br />
&lt;div class="indent">$results[$key]['Event']['begindate'] = $this-&amp;gt;dateFormatAfterFind($val['Event']['begindate']);&lt;br />
&lt;/div>}&lt;br />
&lt;/div>}&lt;br />
return $results;&lt;/div>
}&lt;br />
function dateFormatAfterFind($dateString) {&lt;br />
&lt;div class="indent">return date('d-m-Y', strtotime($dateString));&lt;/div>
}&lt;a name="h817-1">&lt;/a>&lt;h3>beforeValidate&lt;/h3>
&lt;div class="indent"> &lt;strong>beforeValidate()&lt;/strong>&lt;/div>
Используйте этот колбэк для&amp;nbsp;изменения данных перед их&amp;nbsp;валидацией, или&amp;nbsp;для модификации правил валидации, если это&amp;nbsp;необходимо. Эта&amp;nbsp;функция также должна вернуть true, или&amp;nbsp;выполнение текущего save() будет прервано.&lt;a name="h817-2">&lt;/a>&lt;h3>beforeSave&lt;/h3>
&lt;div class="indent"> &lt;strong>beforeSave()&lt;/strong>&lt;/div>
В&amp;nbsp;этой функции вы&amp;nbsp;можете поместить любой код, который необходимо выполнить перед сохранением данных. Эта&amp;nbsp;функция выполняется сразу же&amp;nbsp;после того, как&amp;nbsp;данные модели успешно прошли валидацию, но&amp;nbsp;до того, как&amp;nbsp;они были сохранены. Эта&amp;nbsp;функция также должна вернуть true, если вы&amp;nbsp;хотите чтобы операция сохранения была выполнена.&lt;br />
Этот колбэк особенно удобен для&amp;nbsp;кода, который должен быть выполнен перед сохранением данных. Например, ваше хранилище данных принимает даты только в&amp;nbsp;определенном формате. Вы&amp;nbsp;можете получить доступ к&amp;nbsp;данным через $this-&amp;gt;data и&amp;nbsp;изменить их.&lt;br />
Ниже приведен пример, как&amp;nbsp;beforeSave может быть применен для&amp;nbsp;конвертации даты. Код&amp;nbsp;в&amp;nbsp;примере используется для&amp;nbsp;приложения, где&amp;nbsp;формат begindate в&amp;nbsp;БД 'YYYY-MM-DD' и&amp;nbsp;формат вывода 'DD-MM-YYYY'. Конечно, это&amp;nbsp;легко может быть изменено. Используйте код, представленный ниже, в&amp;nbsp;соответствующей модели.&lt;br />
function beforeSave() {&lt;br />
&lt;div class="indent">if(!empty($this-&amp;gt;data['Event']['begindate']) &amp;&amp; !empty($this-&amp;gt;data['Event']['enddate'])) {&lt;br />
&lt;div class="indent">		$this-&amp;gt;data['Event']['begindate'] = $this-&amp;gt;dateFormatBeforeSave($this-&amp;gt;data['Event']['begindate']);&lt;br />
		$this-&amp;gt;data['Event']['enddate'] = $this-&amp;gt;dateFormat($this-&amp;gt;data['Event']['enddate']);&lt;br />
&lt;/div>}&lt;br />
return true;&lt;/div>
}&lt;br />
function dateFormatBeforeSave($dateString) {&lt;br />
&lt;div class="indent">return date('Y-m-d', strtotime($dateString)); // Direction is&amp;nbsp;from &lt;/div>
}&lt;br />
Убедитесь, что&amp;nbsp;функция beforeSave() вернула true, или&amp;nbsp;сохранение не&amp;nbsp;произойдет.&lt;a name="h817-3">&lt;/a>&lt;h3>afterSave&lt;/h3>
&lt;div class="indent"> &lt;strong>afterSave(boolean $created)&lt;/strong>&lt;/div>
Если у&amp;nbsp;вас есть код, который необходимо выполнять после каждой операции сохранения, то&amp;nbsp;разместите его&amp;nbsp;в&amp;nbsp;этом колбэке.&lt;br />
Значение $created будет true, если объект был&amp;nbsp;создан (а не&amp;nbsp;обновлен).&lt;a name="h817-4">&lt;/a>&lt;h3>beforeDelete&lt;/h3>
&lt;div class="indent"> &lt;strong>beforeDelete()&lt;/strong>&lt;/div>
Размещайте в&amp;nbsp;этой функции любой код, который необходимо выполнить перед удалением. Эта&amp;nbsp;функция должна вернуть true, чтобы удаление произошло и&amp;nbsp;false в&amp;nbsp;противном случае.&lt;a name="h817-5">&lt;/a>&lt;h3>afterDelete&lt;/h3>
&lt;div class="indent"> &lt;strong>afterDelete()&lt;/strong>&lt;/div>
Размещайте в&amp;nbsp;этой функции любой код, который необходимо выполнять после каждого удаления.&lt;a name="h817-6">&lt;/a>&lt;h3>onError&lt;/h3>
&lt;div class="indent"> &lt;strong>onError()&lt;/strong>&lt;/div>
Вызывается, если возникают какие-либо проблемы.&lt;br />
&lt;span class="missingpage">&amp;lt;&amp;lt; Ассоциации: связывание моделей&lt;/span>&lt;a href="http://cake-php.ru/wiki/Associations/edit?add=1" title="Создать эту страницу">?&lt;/a> | &lt;span class="missingpage">Переменные модели&lt;/span>&lt;a href="http://cake-php.ru/wiki/Attributes/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;strong>afterFind(array $results, bool $primary)&lt;/strong>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-12 20:28:34</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks/show?time=2009-02-12+20%3A28%3A34</link>
<description>&lt;div class="pageBefore">&lt;img src="http://cake-php.ru/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Models&amp;nbsp;/&amp;nbsp;Callbacks&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks?time=2009-02-12+20%3A28%3A34">2009-02-12 20:28:34&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Models/Callbacks?time=2009-03-01+18%3A32%3A02">2009-03-01 18:32:02&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;br />
Если вы&amp;nbsp;хотите выполнить какой-то код&amp;nbsp;перед или&amp;nbsp;после действия модели &amp;ndash; используйте колбэки модели. Эти&amp;nbsp;функции могут быть определены в&amp;nbsp;классах моделей (включая класс &lt;!--notypo-->AppModel&lt;!--/notypo--> ). &lt;br />
&lt;br />
&lt;hr noshade="noshade" size="1" />
&lt;a name="h817-1">&lt;/a>&lt;h3> beforeFind&lt;/h3>
&lt;br />
&lt;div class="indent"> &lt;strong>beforeFind(mixed $queryData)&lt;/strong>&lt;/div>
&lt;br />
Вызывается перед любым, относящимся к&amp;nbsp;поиску, действием. Параметр $queryData содержит информацию о&amp;nbsp;текущем запросе: условия, поля и&amp;nbsp;прочее.&lt;br />
&lt;br />
Если вы&amp;nbsp;не хотите, чтобы операция поиска выполнилась (возможно из-за каких-то опций $queryData ), то&amp;nbsp;возвращайте false. Иначе, возвращайте, возможно измененный, параметр $queryData, или&amp;nbsp;что-либо другое, что&amp;nbsp;вы&amp;nbsp;хотите передать для&amp;nbsp;поиска.&lt;br />
&lt;br />
Вы&amp;nbsp;можете использовать этот колбэк для&amp;nbsp;ограничения действий, в&amp;nbsp;зависимости от&amp;nbsp;роли пользователя. Или&amp;nbsp;сделать кэширование на&amp;nbsp;основе текущей загрузки.&lt;br />
&lt;br />
&lt;hr noshade="noshade" size="1" />
&lt;a name="h817-2">&lt;/a>&lt;h3>afterFind&lt;/h3>
&lt;br />
 &lt;strong>afterFind(array $results, bool $primary)&lt;/strong>&lt;br />
&lt;br />
Используйте этот колбэк для&amp;nbsp;изменения результатов, которые вернула операция поиска; или&amp;nbsp;для вставки любого другого кода, который нужно выполнить после поиска. Параметр $results содержит, данные возвращенные поисковым действием, например:&lt;br />
&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?&lt;br />$results&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;array(&lt;br />&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">0&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;array(&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'ModelName'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;array(&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'field1'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'value1'&lt;/span>&lt;span style="color: #007700">,&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'field2'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'value2'&lt;/span>&lt;span style="color: #007700">,&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;),&lt;br />&amp;nbsp;&amp;nbsp;),&lt;br />);&lt;br />&lt;br />&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo--> &lt;br />
&lt;br />
Возвращаемое значение для&amp;nbsp;этого колбэка &amp;ndash; возможно измененные, результаты операции поиска, запустившей этот колбэк.&lt;br />
&lt;br />
Если $primary = false, то&amp;nbsp;формат $results будет немного отличным, от&amp;nbsp;ожидаемого; вместо обычного результата, который вы&amp;nbsp;получаете после find операции, вы&amp;nbsp;получите такой: &lt;br />
&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?&lt;br />$results&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;array(&lt;br />&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'field_1'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'value'&lt;/span>&lt;span style="color: #007700">,&lt;br />&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'field_2'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'value2'&lt;br />&lt;/span>&lt;span style="color: #007700">);&lt;br />&lt;/span>&lt;span style="color: #0000BB">?&amp;gt;&lt;/span>
&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
