CakePHP - Manual/Developing/Behaviors/CreatingBehaviors /wiki/Manual/Developing/Behaviors/CreatingBehaviors History/revisions of CakePHP/Manual/Developing/Behaviors/CreatingBehaviors en-us 2009-03-05 20:48:12 /wiki/Manual/Developing/Behaviors/CreatingBehaviors/show?time=2009-03-05+20%3A48%3A12 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a name=".manual.developing.behaviors.creatingbehaviors" href="/wiki/Manual/Developing/Behaviors/CreatingBehaviors" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Behaviors&nbsp;/&nbsp;Creating&nbsp;Behaviors</a> за <a href="/wiki/Manual/Developing/Behaviors/CreatingBehaviors?time=2009-03-05+20%3A48%3A12">2009-03-05 20:48:12</a> и <a href="/wiki/Manual/Developing/Behaviors/CreatingBehaviors">2009-03-08 12:15:45</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Поведения, подключенные к&nbsp;моделям, имеют свои колбэки, вызываемые автоматически. Эти&nbsp;колбэки подобны колбэкам моделей: beforeFind, afterFind, beforeSave, afterSave, beforeDelete, afterDelete и&nbsp;onError.<br /> Полезно использовать встроенные поведения, как&nbsp;образец для&nbsp;создания вашего собственного. Найти их&nbsp;можно в&nbsp;cake/libs/models/behaviors/.<br /> Каждый колбэк в&nbsp;качестве первого параметра получает ссылку на&nbsp;модель, из&nbsp;которой он&nbsp;вызывается.<br /> Кроме того, вы&nbsp;можете добавить настройки для&nbsp;поведения. Информация об&nbsp;определении настроек может быть найдена в&nbsp;главе о&nbsp;встроенных поведениях и&nbsp;их настройке.<br /> Пример, который иллюстрирует, как&nbsp;настройки поведения могут быть переданы из&nbsp;модели в&nbsp;поведение:<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">Post&nbsp;</span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">AppModel&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="color: #0000BB">$name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'Post'<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">$actsAs&nbsp;</span><span style="color: #007700">=&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'YourBehavior'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'option1_key'&nbsp;</span><span style="color: #007700">=&gt;;&nbsp;</span><span style="color: #DD0000">'option1_value'</span><span style="color: #007700">));<br />}<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> Начиная с&nbsp;версии 1.2.8004, <!--notypo-->CakePHP<!--/notypo--> добавляет эти&nbsp;настройки только один раз&nbsp;для модели/алиаса. Для&nbsp;дальнейшего обновления поведения вы&nbsp;должны соблюдать алиасы (или модели).<br /> Дружественная к&nbsp;обновлению, функция setup будет выглядеть подобным образом:<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">setup</span><span style="color: #007700">(&amp;</span><span style="color: #0000BB">$model</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$settings</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!isset(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">settings</span><span style="color: #007700">[</span><span style="color: #0000BB">$model</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">alias</span><span style="color: #007700">]))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">settings</span><span style="color: #007700">[</span><span style="color: #0000BB">$model</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">alias</span><span style="color: #007700">]&nbsp;=&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;'option1_key'&nbsp;=&gt;&nbsp;'option1_default_value',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;'option2_key'&nbsp;=&gt;&nbsp;'option2_default_value',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;'option3_key'&nbsp;=&gt;&nbsp;'option3_default_value',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">settings</span><span style="color: #007700">[</span><span style="color: #0000BB">$Model</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">alias</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">array_merge</span><span style="color: #007700">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">settings</span><span style="color: #007700">[</span><span style="color: #0000BB">$Model</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">alias</span><span style="color: #007700">],&nbsp;(array)</span><span style="color: #0000BB">$settings</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--></div></div>