CakePHP - Manual/CommonTasks/DataValidation /wiki/Manual/CommonTasks/DataValidation History/revisions of CakePHP/Manual/CommonTasks/DataValidation en-us 2009-03-25 15:55:10 /wiki/Manual/CommonTasks/DataValidation/show?time=2009-03-25+15%3A55%3A10 <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.commontasks.datavalidation" href="/wiki/Manual/CommonTasks/DataValidation" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Data&nbsp;Validation</a> за <a href="/wiki/Manual/CommonTasks/DataValidation?time=2009-03-25+15%3A55%3A10">2009-03-25 15:55:10</a> и <a href="/wiki/Manual/CommonTasks/DataValidation">2009-03-25 16:02:51</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><ul><li><span class="missingpage">Одно правило для&nbsp;поля</span><a href="/wiki/OneRulePerField/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Множество правил для&nbsp;поля</span><a href="/wiki/MultipleRules/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Встроенные правила валидации</span><a href="/wiki/CoreRules/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Пользовательские правила валидации</span><a href="/wiki/CustomRules/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Валидация данных из&nbsp;контроллера</span><a href="/wiki/FromController/edit?add=1" title="Создать эту страницу">?</a></li></ul></div></div> 2009-03-25 15:44:21 /wiki/Manual/CommonTasks/DataValidation/show?time=2009-03-25+15%3A44%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/CommonTasks/DataValidation" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Data&nbsp;Validation</a> за <a href="/wiki/Manual/CommonTasks/DataValidation?time=2009-03-25+15%3A44%3A21">2009-03-25 15:44:21</a> и <a href="/wiki/Manual/CommonTasks/DataValidation?time=2009-03-25+15%3A55%3A10">2009-03-25 15:55:10</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><div class="indent"></div></div><br /> <b>Удалено:</b><br /> <div class="deletions"><ul><li><span class="missingpage">Чистка</span><a href="/wiki/Sanitization/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Обработка ошибок</span><a href="/wiki/ErrorHandling/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Отладка</span><a href="/wiki/Debugging/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Кэширование</span><a href="/wiki/Caching/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Регистрация</span><a href="/wiki/Logging/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Тестирование</span><a href="/wiki/Testing/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Локализация и&nbsp;интернационализация</span><a href="/wiki/Localization/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Нумерация страниц</span><a href="/wiki/Pagination/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Остальное</span><a href="/wiki/Rest/edit?add=1" title="Создать эту страницу">?</a> </li></ul></div></div> 2009-03-25 15:15:08 /wiki/Manual/CommonTasks/DataValidation/show?time=2009-03-25+15%3A15%3A08 <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/CommonTasks/DataValidation" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Data&nbsp;Validation</a> за <a href="/wiki/Manual/CommonTasks/DataValidation?time=2009-03-25+15%3A15%3A08">2009-03-25 15:15:08</a> и <a href="/wiki/Manual/CommonTasks/DataValidation?time=2009-03-25+15%3A44%3A21">2009-03-25 15:44:21</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><ul><li><span class="missingpage">Чистка</span><a href="/wiki/Sanitization/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Обработка ошибок</span><a href="/wiki/ErrorHandling/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Отладка</span><a href="/wiki/Debugging/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Кэширование</span><a href="/wiki/Caching/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Регистрация</span><a href="/wiki/Logging/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Тестирование</span><a href="/wiki/Testing/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Локализация и&nbsp;интернационализация</span><a href="/wiki/Localization/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Нумерация страниц</span><a href="/wiki/Pagination/edit?add=1" title="Создать эту страницу">?</a> </li><li><span class="missingpage">Остальное</span><a href="/wiki/Rest/edit?add=1" title="Создать эту страницу">?</a> </li></ul> Два&nbsp;правила определены для&nbsp;логина: он&nbsp;должен содержать только буквы и&nbsp;цифры, и&nbsp;его длина должна быть от&nbsp;5 до&nbsp;15 символов. Пароль должен состоять минимум из&nbsp;8 символов; email &ndash; должен быть корректно заданным и&nbsp;born &ndash; допустимая дата. Также, обратите внимание, как&nbsp;вы&nbsp;можете определить специальные сообщения для&nbsp;ошибок, которые <!--notypo-->CakePHP<!--/notypo--> будет использовать, когда эти&nbsp;правила не&nbsp;будут соблюдены.<br /> Как&nbsp;показано в&nbsp;примере выше &ndash; одно поле может иметь множество правил валидации. И, если встроенные правила не&nbsp;подходят вашим критериям, то&nbsp;вы всегда можете добавить ваши собственные правила проверки данных.<br /> Теперь, когда вы&nbsp;представляете как&nbsp;правила проверки данных работают, давайте посмотрим как&nbsp;эти правила определяются в&nbsp;модели. Существует три&nbsp;разных способа определения правил валидации: просты массивы, отдельное правило для&nbsp;каждого поля, и&nbsp;множество правил для&nbsp;каждого поля.<br /> <span class="missingpage">&lt;&lt; Стандартные задачи с&nbsp;CakePHP</span><a href="/wiki/CommonTasks/edit?add=1" title="Создать эту страницу">?</a> | <span class="missingpage">Простые правила &gt;&gt;</span><a href="/wiki/SimpleRules/edit?add=1" title="Создать эту страницу">?</a></div><br /> <b>Удалено:</b><br /> <div class="deletions"><ul><li>...</li></ul></div></div> 2009-03-25 13:33:40 /wiki/Manual/CommonTasks/DataValidation/show?time=2009-03-25+13%3A33%3A40 <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/CommonTasks/DataValidation" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Data&nbsp;Validation</a> за <a href="/wiki/Manual/CommonTasks/DataValidation?time=2009-03-25+13%3A33%3A40">2009-03-25 13:33:40</a> и <a href="/wiki/Manual/CommonTasks/DataValidation?time=2009-03-25+15%3A15%3A08">2009-03-25 15:15:08</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><br /> <ul><li><span class="missingpage">Простые правила</span><a href="/wiki/SimpleRules/edit?add=1" title="Создать эту страницу">?</a> </li><li>...</li></ul> <br /> Проверка данных (validation) &ndash; это&nbsp;важная часть каждого приложения, т.к. она&nbsp;помогает убедиться, что&nbsp;данные модели согласовываются с&nbsp;бизнес правилами программы. Например, вы&nbsp;можете захотеть убедиться, что&nbsp;пароли имеют длину не&nbsp;менее восьми символов, или&nbsp;убедиться, что&nbsp;имена пользователей уникальны. Определение правил проверки данных упрощает работу с&nbsp;формами.<br /> <br /> Существует множество аспектов в&nbsp;процессе контроля данных. В&nbsp;этой главе мы&nbsp;рассмотрим процесс со&nbsp;стороны модели. По&nbsp;существу: что&nbsp;происходит, когда вы&nbsp;вызываете метод save() вашей модели. Дополнительную информацию о&nbsp;том, как&nbsp;управлять выводом ошибок валидации, смотрите в&nbsp;главе о&nbsp;FormHelper.<br /> <br /> Первый шаг&nbsp;в&nbsp;проверке данных &ndash; это&nbsp;создание правил валидации в&nbsp;модели. Для&nbsp;того, чтобы сделать это, используйте массив Model::validate в&nbsp;определении модели, например:<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">User&nbsp;</span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">AppModel&nbsp;</span><span style="color: #007700">{&nbsp;&nbsp;<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">'User'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="color: #0000BB">$validate&nbsp;</span><span style="color: #007700">=&nbsp;array();<br />}<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> <br /> В&nbsp;примере выше, массив $validate добавлен в&nbsp;модель User, но&nbsp;он не&nbsp;содержит правил валидации. Предположим, что&nbsp;в&nbsp;таблице users есть поля login, password, email, born. В&nbsp;следующем примере показаны несколько простых правил проверки данных, которые применяются к&nbsp;указанным полям:<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">User&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">'User'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="color: #0000BB">$validate&nbsp;</span><span style="color: #007700">=&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'login'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'alphaNumeric'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'email'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'email'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'born'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'date'<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> <br /> Последний пример показывает, как&nbsp;правила валидации могут быть добавлены для&nbsp;полей модели. Для&nbsp;поля login разрешены только буквы и&nbsp;цифры, email должен быть правильный, и&nbsp;в born будет пропущена только корректная дата. Определение правил валидации дает возможность <!--notypo-->CakePHP<!--/notypo--> автоматически показывать сообщения с&nbsp;ошибками в&nbsp;формах, если подтвержденные данные не&nbsp;соответствуют определенным правилам.<br /> <br /> В&nbsp;<!--notypo-->CakePHP<!--/notypo--> есть много правил контроля данных и&nbsp;использовать их&nbsp;довольно просто. Некоторые встроенные правила позволяют проверять формат электронных адресов, URL&nbsp;и&nbsp;номеров кредитных карт – но&nbsp;детальнее об&nbsp;этом мы&nbsp;расскажем позже.<br /> <br /> А&nbsp;сейчас рассмотрим пример с&nbsp;более сложными правилами валидации, который показывает преимущества некоторых из&nbsp;этих встроенных правил:<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">User&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">'User'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;</span><span style="color: #0000BB">$validate&nbsp;</span><span style="color: #007700">=&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'login'&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">'alphaNumeric'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'rule'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'alphaNumeric'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'required'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'message'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Только&nbsp;буквы&nbsp;и&nbsp;цифры'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'between'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'rule'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(</span><span style="color: #DD0000">'between'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">5</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">15</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'message'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'От&nbsp;5&nbsp;до&nbsp;15&nbsp;символов'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'password'&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">'rule'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(</span><span style="color: #DD0000">'minLength'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'8'</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'message'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Минимум&nbsp;8&nbsp;символов'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'email'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'email'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'born'&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">'rule'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'date'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'message'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Введите&nbsp;корректную&nbsp;дату'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'allowEmpty'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">true<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;);<br />}<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--></div></div>