CakePHP - Manual/Developing/Console/CreatingShellsTasks /wiki/Manual/Developing/Console/CreatingShellsTasks History/revisions of CakePHP/Manual/Developing/Console/CreatingShellsTasks en-us 2009-03-21 20:03:19 /wiki/Manual/Developing/Console/CreatingShellsTasks/show?time=2009-03-21+20%3A03%3A19 <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.console.creatingshellstasks" href="/wiki/Manual/Developing/Console/CreatingShellsTasks" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Console&nbsp;/&nbsp;Creating&nbsp;Shells&nbsp;Tasks</a> за <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+20%3A03%3A19">2009-03-21 20:03:19</a> и <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks">2009-03-21 20:03:42</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Метод, названный &#147;sound&#148; в&nbsp;классе <span class="missingpage">Sea&nbsp;Shell</span><a href="/wiki/SeaShell/edit?add=1" title="Создать эту страницу">?</a> будет перекрывать доступ к&nbsp;функциональности <br /> задачи Sound, определенной в&nbsp;массиве $tasks.</div><br /> <b>Удалено:</b><br /> <div class="deletions">Метод, названный &#147;sound&#148; в&nbsp;классе <span class="missingpage">Sea&nbsp;Shell</span><a href="/wiki/SeaShell/edit?add=1" title="Создать эту страницу">?</a> будет перекрывать доступ к&nbsp;функциональности задачи Sound, <br /> определенной в&nbsp;массиве $tasks.</div></div> 2009-03-21 20:03:03 /wiki/Manual/Developing/Console/CreatingShellsTasks/show?time=2009-03-21+20%3A03%3A03 <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 href="/wiki/Manual/Developing/Console/CreatingShellsTasks" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Console&nbsp;/&nbsp;Creating&nbsp;Shells&nbsp;Tasks</a> за <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+20%3A03%3A03">2009-03-21 20:03:03</a> и <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+20%3A03%3A19">2009-03-21 20:03:19</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Метод, названный &#147;sound&#148; в&nbsp;классе <span class="missingpage">Sea&nbsp;Shell</span><a href="/wiki/SeaShell/edit?add=1" title="Создать эту страницу">?</a> будет перекрывать доступ к&nbsp;функциональности задачи Sound, <br /> определенной в&nbsp;массиве $tasks.</div><br /> <b>Удалено:</b><br /> <div class="deletions">Метод, названный &#147;sound&#148; в&nbsp;классе <span class="missingpage">Sea&nbsp;Shell</span><a href="/wiki/SeaShell/edit?add=1" title="Создать эту страницу">?</a> будет перекрывать доступ к&nbsp;функциональности задачи Sound, определенной в&nbsp;массиве $tasks.</div></div> 2009-03-21 19:37:05 /wiki/Manual/Developing/Console/CreatingShellsTasks/show?time=2009-03-21+19%3A37%3A05 <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 href="/wiki/Manual/Developing/Console/CreatingShellsTasks" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Console&nbsp;/&nbsp;Creating&nbsp;Shells&nbsp;Tasks</a> за <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+19%3A37%3A05">2009-03-21 19:37:05</a> и <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+20%3A03%3A03">2009-03-21 20:03:03</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Задачи хранятся в&nbsp;/vendors/shells/tasks/ в&nbsp;файлах, названных также, как&nbsp;и&nbsp;классы задач. Т.е., если бы&nbsp;мы создавали новую задачу 'cool'. Class <!--notypo-->CoolTask<!--/notypo--> (который extends Shell) был&nbsp;бы&nbsp;размещен в&nbsp;/vendors/shells/tasks/cool.php.<br /> Каждая задача должна, как&nbsp;минимум, иметь метод execute() &ndash; оболочки будут вызывать этот метод для&nbsp;выполнения кода задачи. <br /> class <span class="missingpage">Sound&nbsp;Task</span><a href="/wiki/SoundTask/edit?add=1" title="Создать эту страницу">?</a> extends Shell {<br /> <div class="indent"> var $uses = array('Model'); // также как&nbsp;в&nbsp;контроллере var $uses<br /> function execute() {}</div> Вы&nbsp;можете вызывать задачи внутри класса оболочки:<br /> class <span class="missingpage">Sea&nbsp;Shell</span><a href="/wiki/SeaShell/edit?add=1" title="Создать эту страницу">?</a> extends Shell // размещен в&nbsp;/vendors/shells/sea.php {<br /> <div class="indent"> var $tasks = array('Sound'); //размещен в&nbsp;/vendors/shells/tasks/sound.php<br /> function main() {<br /> <div class="indent"><div class="indent"> $this-&gt;Sound-&gt;execute();<br /> </div></div> }</div> Метод, названный &#147;sound&#148; в&nbsp;классе <span class="missingpage">Sea&nbsp;Shell</span><a href="/wiki/SeaShell/edit?add=1" title="Создать эту страницу">?</a> будет перекрывать доступ к&nbsp;функциональности задачи Sound, определенной в&nbsp;массиве $tasks.<br /> Вы&nbsp;также можете вызвать задачи прямо из&nbsp;командной строки:<br /> $ cake sea&nbsp;sound<br /> <span class="missingpage">&lt;&lt; Консоль <!--notypo-->CakePHP<!--/notypo--></span><a href="/wiki/Console/edit?add=1" title="Создать эту страницу">?</a> | <span class="missingpage">Плагины&gt;&gt;</span><a href="/wiki/Plugins/edit?add=1" title="Создать эту страницу">?</a></div><br /> <b>Удалено:</b><br /> <div class="deletions">Задачи хранятся в&nbsp;/vendors/shells/tasks/ в&nbsp;файлах, названных также, как&nbsp;и&nbsp;классы задач. Т.е., если бы&nbsp;мы создавали новую задачу 'cool'. Class <span class="missingpage">Cool&nbsp;Task</span><a href="/wiki/CoolTask/edit?add=1" title="Создать эту страницу">?</a> (который extends Shell) был&nbsp;бы&nbsp;размещен в&nbsp;/vendors/shells/tasks/cool.php.</div></div> 2009-03-21 19:11:33 /wiki/Manual/Developing/Console/CreatingShellsTasks/show?time=2009-03-21+19%3A11%3A33 <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 href="/wiki/Manual/Developing/Console/CreatingShellsTasks" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Console&nbsp;/&nbsp;Creating&nbsp;Shells&nbsp;Tasks</a> за <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+19%3A11%3A33">2009-03-21 19:11:33</a> и <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+19%3A37%3A05">2009-03-21 19:37:05</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><hr noshade="noshade" size="1" /><a name="h860-1"></a><h3> Задачи </h3> Задачи &ndash; это&nbsp;маленькие расширения к&nbsp;оболочкам. Они&nbsp;позволяют оболочкам разделять код, и&nbsp;добавляются в&nbsp;оболочки через специальную переменную класса $tasks. Например, во&nbsp;встроенной оболочке bake, определено множество задач:<br /> class <span class="missingpage">Bake&nbsp;Shell</span><a href="/wiki/BakeShell/edit?add=1" title="Создать эту страницу">?</a> extends Shell {<br /> <div class="indent"> var $tasks = array('Project', 'DbConfig', 'Model', 'View', 'Controller');</div> Задачи хранятся в&nbsp;/vendors/shells/tasks/ в&nbsp;файлах, названных также, как&nbsp;и&nbsp;классы задач. Т.е., если бы&nbsp;мы создавали новую задачу 'cool'. Class <span class="missingpage">Cool&nbsp;Task</span><a href="/wiki/CoolTask/edit?add=1" title="Создать эту страницу">?</a> (который extends Shell) был&nbsp;бы&nbsp;размещен в&nbsp;/vendors/shells/tasks/cool.php.</div></div> 2009-03-21 18:28:21 /wiki/Manual/Developing/Console/CreatingShellsTasks/show?time=2009-03-21+18%3A28%3A21 <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 href="/wiki/Manual/Developing/Console/CreatingShellsTasks" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Console&nbsp;/&nbsp;Creating&nbsp;Shells&nbsp;Tasks</a> за <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+18%3A28%3A21">2009-03-21 18:28:21</a> и <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+19%3A11%3A33">2009-03-21 19:11:33</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Теперь мы&nbsp;можем запустить эту&nbsp;оболочку, но&nbsp;она ничего не&nbsp;будет делать. Давайте добавим несколько моделей в&nbsp;оболочку, чтобы мы&nbsp;могли созадить некий отчет. Это&nbsp;делается, так&nbsp;же&nbsp;как и&nbsp;в контроллере: добавлением имен моделей в&nbsp;переменную $uses.<br /> &lt;?php<br /> <div class="indent">var $uses = array('Order');<br /> function main() {<br /> }</div> После добавления нашей модели в&nbsp;массив $uses мы&nbsp;можем использовать её в&nbsp;методе main(). В&nbsp;этом примере наша модель Order будет доступна через $this-&gt;Order в&nbsp;методе main() нашей новой оболочки.<br /> Здесь простой пример кода, который мы&nbsp;можем использовать в&nbsp;оболочке:<br /> <div class="indent">var $uses = array('Order');<br /> function main() {<br /> <div class="indent">//Получить заказы, отгруженные в&nbsp;последнем месяце<br /> $month_ago = date('Y-m-d H:i:s', strtotime('-1 month'));<br /> $orders = $this-&gt;Order-&gt;findAll("<span class="missingpage">Order.shipped</span><a href="/wiki/Order/shipped/edit?add=1" title="Создать эту страницу">?</a> &gt;= '$month_ago'");<br /> //Вывести информацию о&nbsp;каждом заказе<br /> foreach($orders as $order) {<br /> <div class="indent">$this-&gt;out('Order date: ' . $order['created'] . "\n");<br /> $this-&gt;out('Amount: $' . number_format($order['amount'], 2) . "\n");<br /> $this-&gt;out('<hr noshade="noshade" size="1" />' . "\n"); </div></div> <br /> <div class="indent"><div class="indent">$total += $order['amount'];<br /> </div>}<br /> //Вывести итоги для&nbsp;выбранных заказов<br /> $this-&gt;out(&laquo;Total: $" . number_format($total, 2) . "\n"); <br /> </div>}</div> Если команда cake определена в&nbsp;PATH, то&nbsp;вы можете запустить этот отчет на&nbsp;выполнение таким образом:<br /> $ cake report <br /> где&nbsp;report &ndash; имя&nbsp;файла оболочки в&nbsp;/vendor/shells/ без&nbsp;расширения .php. На&nbsp;выходе получится нечто подобное:<br /> Hello user,<br /> <div class="indent"> Welcome to&nbsp;<span class="missingpage">Cake&nbsp;PHP</span><a href="/wiki/CakePHP/edit?add=1" title="Создать эту страницу">?</a> v1.2 Console<br /> <hr noshade="noshade" size="1" /> App&nbsp;: app<br /> Path: /path/to/cake/app<br /> <hr noshade="noshade" size="1" /> Order date: <span class="nobr">2007&ndash;07&ndash;30</span> 10:31:12<br /> Amount: $42.78<br /> <hr noshade="noshade" size="1" /> Order date: <span class="nobr">2007&ndash;07&ndash;30</span> 21:16:03<br /> Amount: $83.63<br /> <hr noshade="noshade" size="1" /> Order date: <span class="nobr">2007&ndash;07&ndash;29</span> 15:52:42<br /> Amount: $423.26<br /> <hr noshade="noshade" size="1" /> Order date: <span class="nobr">2007&ndash;07&ndash;29</span> 01:42:22<br /> Amount: $134.52<br /> <hr noshade="noshade" size="1" /> Order date: <span class="nobr">2007&ndash;07&ndash;29</span> 01:40:52<br /> Amount: $183.56<br /> <hr noshade="noshade" size="1" /> Total: $867.75</div></div></div> 2009-03-21 18:25:18 /wiki/Manual/Developing/Console/CreatingShellsTasks/show?time=2009-03-21+18%3A25%3A18 <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 href="/wiki/Manual/Developing/Console/CreatingShellsTasks" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Console&nbsp;/&nbsp;Creating&nbsp;Shells&nbsp;Tasks</a> за <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+18%3A25%3A18">2009-03-21 18:25:18</a> и <a href="/wiki/Manual/Developing/Console/CreatingShellsTasks?time=2009-03-21+18%3A28%3A21">2009-03-21 18:28:21</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><a name="h860-1"></a><h3> Создание собственных оболочек </h3> Давайте создадим оболочку для&nbsp;использования в&nbsp;консоли. Для&nbsp;этого примера, мы&nbsp;создадим оболочку-"отчет", которая выведет некоторые данные модели. Во-первых, создадим report.php в&nbsp;/vendors/shells/.<br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?php&nbsp;<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">ReportShell&nbsp;</span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">Shell&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">main</span><span style="color: #007700">()&nbsp;{}<br />}<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--></div></div>