<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>CakePHP - Manual/CommonTasks/ErrorHandling</title>
<link>http://cake-php.ru/wiki/Manual/CommonTasks/ErrorHandling</link>
<description>History/revisions of CakePHP/Manual/CommonTasks/ErrorHandling</description>
<language>en-us</language>
<item>
<title>2009-03-25 15:56:19</title>
<link>http://cake-php.ru/wiki/Manual/CommonTasks/ErrorHandling/show?time=2009-03-25+15%3A56%3A19</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.commontasks.errorhandling" href="http://cake-php.ru/wiki/Manual/CommonTasks/ErrorHandling" class="">/Manual&amp;nbsp;/&amp;nbsp;Common&amp;nbsp;Tasks&amp;nbsp;/&amp;nbsp;Error&amp;nbsp;Handling&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/CommonTasks/ErrorHandling?time=2009-03-25+15%3A56%3A19">2009-03-25 15:56:19&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/CommonTasks/ErrorHandling">2009-04-14 17:17:38&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;nbsp;пользователя страницу с&amp;nbsp;ошибкой. Для&amp;nbsp;того, чтобы не&amp;nbsp;писать обработку ошибок для&amp;nbsp;каждого контроллера и&amp;nbsp;компонента, вы&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;?&amp;nbsp;$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">cakeError&lt;/span>&lt;span style="color: #007700">(&amp;lt;&lt;/span>&lt;span style="color: #0000BB">string&amp;nbsp;errorType&lt;/span>&lt;span style="color: #007700">&amp;gt;,&amp;nbsp;[array&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">parameters&lt;/span>&lt;span style="color: #007700">]);&amp;nbsp;&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;nbsp;и прекратит дальнейшую обработку данных в&amp;nbsp;вашем приложении.&lt;br />
&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
parameters&amp;nbsp;должен&amp;nbsp;быть&amp;nbsp;массивом&amp;nbsp;строк.&amp;nbsp;Если&amp;nbsp;массив&amp;nbsp;содержит&amp;nbsp;объекты&amp;nbsp;&lt;br />(включая&amp;nbsp;Exception&amp;nbsp;объекты),&amp;nbsp;то&amp;nbsp;они&amp;nbsp;будут&amp;nbsp;приведены&amp;nbsp;в&amp;nbsp;строки.&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
&lt;br />
В&amp;nbsp;&lt;!--notypo-->CakePHP&lt;!--/notypo--> определены множество типов ошибок, но&amp;nbsp;во время написания, большинство типов ошибок действительно полезны только для&amp;nbsp;фреймворка. Наиболее полезная для&amp;nbsp;разработчика приложений &amp;ndash;  это&amp;nbsp;старая добрая 404 ошибка. Она&amp;nbsp;может быть вызвана без&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;?&amp;nbsp;$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">cakeError&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'error404'&lt;/span>&lt;span style="color: #007700">);&amp;nbsp;&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;nbsp;отчета об&amp;nbsp;ошибке, передав параметр url:&lt;br />
&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;code>&lt;span style="color: #000000">
&lt;span style="color: #0000BB">&amp;lt;?&amp;nbsp;$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">cakeError&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'error404'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;array(&lt;/span>&lt;span style="color: #DD0000">'url'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'some/other.url'&lt;/span>&lt;span style="color: #007700">));&amp;nbsp;&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;nbsp;использования ваших собственных типов ошибок. Обработчики ошибок приложения больше всего похожи на&amp;nbsp;действия контроллера; Вы&amp;nbsp;типично будете передавать с&amp;nbsp;помощью set() любой параметр, чтобы он&amp;nbsp;был доступен в&amp;nbsp;отображении и&amp;nbsp;затем рендерить файл отображения и&amp;nbsp;вашего каталога app/views/errors.&lt;br />
&lt;br />
Создадим файл app/app_error.php со&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;?php&lt;br />&lt;/span>&lt;span style="color: #007700">class&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">AppError&amp;nbsp;&lt;/span>&lt;span style="color: #007700">extends&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">ErrorHandler&amp;nbsp;&lt;/span>&lt;span style="color: #007700">{&lt;br />}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;nbsp;этот класс. Просто создайте новый метод с&amp;nbsp;именем, которое вы&amp;nbsp;хотите использовать в&amp;nbsp;качестве типа ошибки.&lt;br />
&lt;br />
Предположим у&amp;nbsp;нас есть приложение, которое записывает файлы на&amp;nbsp;диск и&amp;nbsp;это приложение должно выводить пользователям отчет об&amp;nbsp;ошибках записи. Мы&amp;nbsp;не хотим добавлять код&amp;nbsp;для всего этого в&amp;nbsp;различные части нашего приложения, таким образом &amp;ndash; это&amp;nbsp;отличная причина для&amp;nbsp;использования нового типа ошибки.&lt;br />
&lt;br />
Добавьте новый метод в&amp;nbsp;ваш класс &lt;!--notypo-->AppError&lt;!--/notypo-->. Мы&amp;nbsp;будем принимать один параметр file &amp;ndash; путь к&amp;nbsp;файлу, который не&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 />&lt;/span>&lt;span style="color: #007700">function&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">cannotWriteFile&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$params&lt;/span>&lt;span style="color: #007700">)&amp;nbsp;{&lt;br />&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">controller&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">set&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'file'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$params&lt;/span>&lt;span style="color: #007700">[&lt;/span>&lt;span style="color: #DD0000">'file'&lt;/span>&lt;span style="color: #007700">]);&lt;br />&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">_outputMessage&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'cannot_write_file'&lt;/span>&lt;span style="color: #007700">);&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;app/views/errors/cannot_write_file.ctp&lt;br />
&lt;br />
&lt;!--notypo-->&lt;div class="code">&lt;pre>&lt;span style="color: #000080;font-weight:bold;">&amp;lt;h2&amp;gt;&lt;/span>Не удалось записать файл&lt;span style="color: #000080;font-weight:bold;">&amp;lt;/h2&amp;gt;&lt;/span>
&lt;span style="color: #000080;font-weight:bold;">&amp;lt;p&amp;gt;&lt;/span>Не могу записать файл &amp;lt;?php echo $file ?&lt;span style="color: #000080;font-weight:bold;">&amp;gt;&lt;/span> на диск.&lt;span style="color: #000080;font-weight:bold;">&amp;lt;/p&amp;gt;&lt;/span>&lt;/pre>&lt;/div>&lt;!--/notypo-->&lt;br />
&lt;br />
и&amp;nbsp;добавьте ошибку в&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 />&amp;nbsp;&amp;nbsp;&amp;nbsp;$this&lt;/span>&lt;span style="color: #007700">-&amp;gt;&lt;/span>&lt;span style="color: #0000BB">cakeError&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #DD0000">'cannotWriteFile'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;array(&lt;/span>&lt;span style="color: #DD0000">'file'&lt;/span>&lt;span style="color: #007700">=&amp;gt;&lt;/span>&lt;span style="color: #DD0000">'somefilename'&lt;/span>&lt;span style="color: #007700">));&amp;nbsp;&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;умолчанию $this-&amp;gt;&lt;!--notypo-->__outputMessage(&amp;lt;view-filename&amp;gt;)&lt;!--/notypo--> просто отобразит отображение views/errors/&amp;lt;view-filename&amp;gt;.ctp. Если вы&amp;nbsp;желаете изменить это&amp;nbsp;поведение,  то&amp;nbsp;вы можете переопределить &lt;!--notypo-->__outputMessage($template)&lt;!--/notypo--> в&amp;nbsp;вашем классе &lt;!--notypo-->AppError&lt;!--/notypo-->.&lt;br />
&lt;br />
&lt;span class="missingpage">&amp;lt;&amp;lt; Чистка данных&lt;/span>&lt;a href="http://cake-php.ru/wiki/DataSanitization/edit?add=1" title="Создать эту страницу">?&lt;/a> | &lt;span class="missingpage">Отладка &amp;gt;&amp;gt;&lt;/span>&lt;a href="http://cake-php.ru/wiki/Debugging/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;br />&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
