<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>CakePHP - Manual/Developing/Components/Creating</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Components/Creating</link>
<description>History/revisions of CakePHP/Manual/Developing/Components/Creating</description>
<language>en-us</language>
<item>
<title>2009-02-10 21:50:44</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Components/Creating/show?time=2009-02-10+21%3A50%3A44</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.components.creating" href="http://cake-php.ru/wiki/Manual/Developing/Components/Creating" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Components&amp;nbsp;/&amp;nbsp;Creating&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Components/Creating?time=2009-02-10+21%3A50%3A44">2009-02-10 21:50:44&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Components/Creating">2009-02-10 21:54:32&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;hr noshade="noshade" size="1" />
&lt;hr noshade="noshade" size="1" />
&lt;hr noshade="noshade" size="1" />&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-02-10 20:55:53</title>
<link>http://cake-php.ru/wiki/Manual/Developing/Components/Creating/show?time=2009-02-10+20%3A55%3A53</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/Components/Creating" class="">/Manual&amp;nbsp;/&amp;nbsp;Developing&amp;nbsp;/&amp;nbsp;Components&amp;nbsp;/&amp;nbsp;Creating&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Components/Creating?time=2009-02-10+20%3A55%3A53">2009-02-10 20:55:53&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/Developing/Components/Creating?time=2009-02-10+21%3A50%3A44">2009-02-10 21:50:44&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Код, приведенный выше, передаст массив, содержащий precision и&amp;nbsp;randomGenerator в&amp;nbsp;метод initialize() компонента &lt;!--notypo-->MathComponent&lt;!--/notypo--> вторым параметром.&lt;a name="h802-1">&lt;/a>&lt;h3>Доступ к&amp;nbsp;MVC классу с&amp;nbsp;помощью компонентов&lt;/h3>
Для&amp;nbsp;получения доступа к&amp;nbsp;экземпляру контроллера с&amp;nbsp;помощью созданного компонента, вам&amp;nbsp;необходимо использовать метод &lt;strong>initialize()&lt;/strong> или&amp;nbsp;&lt;strong>startup()&lt;/strong>. Эти&amp;nbsp;специальные функции принимают ссылку к&amp;nbsp;контроллеру в&amp;nbsp;качестве своего первого параметра и&amp;nbsp;автоматически вызываются. Метод initialize() вызывается перед методом контроллера beforeFilter(), а&amp;nbsp;startup() метод &amp;ndash; после beforeFilter(). Если, по&amp;nbsp;каким-то причинам, вы&amp;nbsp;не хотите, чтобы startup() метод вызывался, то&amp;nbsp;присвойте переменной класса &lt;strong>$disableStartup&lt;/strong> значение true.&lt;br />
Если вы&amp;nbsp;хотите вставить какой-то код&amp;nbsp;перед тем, как&amp;nbsp;beforeFilter() вызовется, вам&amp;nbsp;необходимо использовать метод компонента initialize().&lt;br />
class &lt;span class="missingpage">Check&amp;nbsp;Component&lt;/span>&lt;a href="http://cake-php.ru/wiki/CheckComponent/edit?add=1" title="Создать эту страницу">?&lt;/a> extends Object {&lt;br />
&lt;div class="indent">//вызывается перед Controller::beforeFilter()&lt;br />
function initialize(&amp;$controller) {&lt;br />
&lt;div class="indent">// сохранение ссылки на&amp;nbsp;контроллер для&amp;nbsp;последующего использования&lt;br />
$this-&amp;gt;controller =&amp; $controller;&lt;br />
&lt;/div>}&lt;br />
//вызывается после Controller::beforeFilter()&lt;br />
function startup(&amp;$controller) {&lt;br />
}&lt;br />
function redirectSomewhere($value) {&lt;br />
&lt;div class="indent">// вызов метода контроллера&lt;br />
$this-&amp;gt;controller-&amp;gt;redirect($value);&lt;br />
&lt;/div>}&lt;/div>
Вы&amp;nbsp;можете захотеть использовать другие компоненты внутри вашего компонента. Для&amp;nbsp;этого создайте переменную класса $components в&amp;nbsp;виде массива, который содержит имена нужных вам&amp;nbsp;компонентов.&lt;br />
&lt;strong>Только метод initialize вызывается автоматически для&amp;nbsp;вложенных компонентов!&lt;/strong>&lt;br />
class &lt;span class="missingpage">My&amp;nbsp;Component&lt;/span>&lt;a href="http://cake-php.ru/wiki/MyComponent/edit?add=1" title="Создать эту страницу">?&lt;/a> extends Object {&lt;br />
&lt;div class="indent">// Этот компонент использует другие компоненты&lt;br />
var $components = array('Session', 'Math');&lt;br />
function doStuff() {&lt;br />
&lt;div class="indent">$result = $this-&amp;gt;Math-&amp;gt;doComplexOperation(1, 2);&lt;br />
$this-&amp;gt;Session-&amp;gt;write('stuff', $result);&lt;br />
&lt;/div>}&lt;/div>
Использовать модели в&amp;nbsp;компонентах, в&amp;nbsp;общем случае, не&amp;nbsp;рекомендуется; однако, если после взвешивания всех возможностей, вы&amp;nbsp;захотите это&amp;nbsp;сделать, то&amp;nbsp;вам необходимо инициализировать класс модели в&amp;nbsp;какую-либо переменную и&amp;nbsp;использовать ее.&lt;br />
Вот&amp;nbsp;пример:&lt;br />
&lt;div class="indent">function doComplexOperation($amount1, $amount2) {&lt;br />
&lt;div class="indent">return $amount1 + $amount2;&lt;br />
&lt;/div>}&lt;br />
function doUberComplexOperation ($amount1, $amount2) {&lt;br />
&lt;div class="indent">$userInstance = &lt;span class="missingpage">Class&amp;nbsp;Registry&lt;/span>&lt;a href="http://cake-php.ru/wiki/ClassRegistry/edit?add=1" title="Создать эту страницу">?&lt;/a>::init('User');&lt;br />
$totalUsers = $userInstance-&amp;gt;find('count');&lt;br />
return ($amount1 + $amount2) / $totalUsers;&lt;br />
&lt;/div>}&lt;/div>&lt;a name="h802-2">&lt;/a>&lt;h3>Использование других компонентов в&amp;nbsp;вашем компоненте&lt;/h3>
Иногда один из&amp;nbsp;ваших компонентов может зависеть от&amp;nbsp;другого. Если функциональность этих компонентов не&amp;nbsp;связана иначе, кроме этой зависимости, то&amp;nbsp;вы не&amp;nbsp;захотите объединить их&amp;nbsp;в один компонент. Вместо этого вы&amp;nbsp;можете сделать ваш&amp;nbsp;компонент родителем, создав массив $components со&amp;nbsp;списком потомков. Компоненты-родители загружаются перед их&amp;nbsp;потомками и&amp;nbsp;у потомков есть доступ к&amp;nbsp;родителям.&lt;br />
Родитель:&lt;br />
class &lt;span class="missingpage">Parent&amp;nbsp;Component&lt;/span>&lt;a href="http://cake-php.ru/wiki/ParentComponent/edit?add=1" title="Создать эту страницу">?&lt;/a> extends Object {&lt;br />
&lt;div class="indent">&lt;div class="indent">var $name = &amp;#147;Parent&amp;#148;;&lt;br />
var $components = array( &amp;#147;Child&amp;#148; );&lt;br />
function initialize(&amp;$controller) {&lt;br />
&lt;div class="indent">&lt;div class="indent">$this-&amp;gt;Child-&amp;gt;foo();&lt;br />
&lt;/div>&lt;/div>function bar() {&lt;br />
&lt;div class="indent">&lt;div class="indent">// ...&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Потомок:&lt;br />
class &lt;span class="missingpage">Child&amp;nbsp;Component&lt;/span>&lt;a href="http://cake-php.ru/wiki/ChildComponent/edit?add=1" title="Создать эту страницу">?&lt;/a> extends Object {&lt;br />
&lt;div class="indent">&lt;div class="indent">var $name = &amp;#147;Child&amp;#148;;&lt;br />
function initialize(&amp;$controller) {&lt;br />
&lt;div class="indent">&lt;div class="indent">$this-&amp;gt;Parent-&amp;gt;bar();&lt;br />
&lt;/div>&lt;/div>function foo() {&lt;br />
&lt;div class="indent">&lt;div class="indent">// ...&lt;/div>&lt;/div>&lt;/div>&lt;/div>
&lt;span class="missingpage">&amp;lt;&amp;lt; Настройка&lt;/span>&lt;a href="http://cake-php.ru/wiki/Configuring/edit?add=1" title="Создать эту страницу">?&lt;/a> | &lt;span class="missingpage">Модели &amp;gt;&amp;gt;&lt;/span>&lt;a href="http://cake-php.ru/wiki/Models/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
