<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>CakePHP - Manual/CommonTasks/DataValidation/CustomRules</title>
<link>http://cake-php.ru/wiki/Manual/CommonTasks/DataValidation/CustomRules</link>
<description>History/revisions of CakePHP/Manual/CommonTasks/DataValidation/CustomRules</description>
<language>en-us</language>
<item>
<title>2009-04-11 20:58:16</title>
<link>http://cake-php.ru/wiki/Manual/CommonTasks/DataValidation/CustomRules/show?time=2009-04-11+20%3A58%3A16</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.datavalidation.customrules" href="http://cake-php.ru/wiki/Manual/CommonTasks/DataValidation/CustomRules" class="">/Manual&amp;nbsp;/&amp;nbsp;Common&amp;nbsp;Tasks&amp;nbsp;/&amp;nbsp;Data&amp;nbsp;Validation&amp;nbsp;/&amp;nbsp;Custom&amp;nbsp;Rules&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/CommonTasks/DataValidation/CustomRules?time=2009-04-11+20%3A58%3A16">2009-04-11 20:58:16&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/CommonTasks/DataValidation/CustomRules">2009-04-11 20:58:45&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">Ваша функция для&amp;nbsp;валидации может быть размещена в&amp;nbsp;модели (как это&amp;nbsp;сделано в&amp;nbsp;примере выше), или&amp;nbsp;в&amp;nbsp;поведении, которое осуществляет модель.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Ваша функция для&amp;nbsp;валидации может быть расмещена в&amp;nbsp;модели (как это&amp;nbsp;сделано в&amp;nbsp;примере выше), или&amp;nbsp;в&amp;nbsp;поведении, которое осуществляет модель.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2009-04-01 17:12:55</title>
<link>http://cake-php.ru/wiki/Manual/CommonTasks/DataValidation/CustomRules/show?time=2009-04-01+17%3A12%3A55</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/CommonTasks/DataValidation/CustomRules" class="">/Manual&amp;nbsp;/&amp;nbsp;Common&amp;nbsp;Tasks&amp;nbsp;/&amp;nbsp;Data&amp;nbsp;Validation&amp;nbsp;/&amp;nbsp;Custom&amp;nbsp;Rules&lt;/a> за &lt;a href="http://cake-php.ru/wiki/Manual/CommonTasks/DataValidation/CustomRules?time=2009-04-01+17%3A12%3A55">2009-04-01 17:12:55&lt;/a> и &lt;a href="http://cake-php.ru/wiki/Manual/CommonTasks/DataValidation/CustomRules?time=2009-04-11+20%3A58%3A16">2009-04-11 20:58:16&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;созданием собственного метода валидации.&lt;br />
&lt;a name="h883-1">&lt;/a>&lt;h3>Собственное регулярное выражение для&amp;nbsp;валидации&lt;/h3>
&lt;br />
В&amp;nbsp;примере ниже проверяется, чтобы поле login содержало только буквы и&amp;nbsp;цифры и&amp;nbsp;было длиной не&amp;nbsp;менее 3 символов.&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">var&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$validate&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;array(&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'login'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;array(&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'rule'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;array(&lt;/span>&lt;span style="color: #DD0000">'custom'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'/^[a-z0-9]{3,}$/i'&lt;/span>&lt;span style="color: #007700">),&amp;nbsp;&amp;nbsp;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'message'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'Логин&amp;nbsp;должен&amp;nbsp;содержать&amp;nbsp;только&amp;nbsp;буквы&amp;nbsp;и&amp;nbsp;цифры.&amp;nbsp;Минимум&amp;nbsp;3&amp;nbsp;символа.'&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 />
&lt;hr noshade="noshade" size="1" />
&lt;a name="h883-2">&lt;/a>&lt;h3> Добавление собственного метода валидации &lt;/h3>
&lt;br />
В&amp;nbsp;некоторых случаях не&amp;nbsp;достаточно проверки данных с&amp;nbsp;помощью регулярных выражений. Например, если вы&amp;nbsp;хотите проверить, чтобы льготный код&amp;nbsp;был использован только 25 раз. Тогда вам&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;?php&lt;br />&lt;/span>&lt;span style="color: #007700">class&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">User&amp;nbsp;&lt;/span>&lt;span style="color: #007700">extends&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">AppModel&amp;nbsp;&lt;/span>&lt;span style="color: #007700">{&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$name&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'User'&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$validate&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;nbsp;array(&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'promotion_code'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;array(&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'rule'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;array(&lt;/span>&lt;span style="color: #DD0000">'limitDuplicates'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">25&lt;/span>&lt;span style="color: #007700">),&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'message'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'Этот&amp;nbsp;код&amp;nbsp;был&amp;nbsp;уже&amp;nbsp;использован&amp;nbsp;много&amp;nbsp;раз.'&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #007700">)&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;);&lt;br />&amp;nbsp;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;function&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">limitDuplicates&lt;/span>&lt;span style="color: #007700">(&lt;/span>&lt;span style="color: #0000BB">$data&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$limit&lt;/span>&lt;span style="color: #007700">){&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$existing_promo_count&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&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">find&lt;/span>&lt;span style="color: #007700">(&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'count'&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;array(&lt;/span>&lt;span style="color: #DD0000">'conditions'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$data&lt;/span>&lt;span style="color: #007700">,&amp;nbsp;&lt;/span>&lt;span style="color: #DD0000">'recursive'&amp;nbsp;&lt;/span>&lt;span style="color: #007700">=&amp;gt;&amp;nbsp;-&lt;/span>&lt;span style="color: #0000BB">1&lt;/span>&lt;span style="color: #007700">)&amp;nbsp;);&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$existing_promo_count&amp;nbsp;&lt;/span>&lt;span style="color: #007700">&amp;lt;&amp;nbsp;&lt;/span>&lt;span style="color: #0000BB">$limit&lt;/span>&lt;span style="color: #007700">;&lt;br />&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&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;хотите передать параметры в&amp;nbsp;вашу функцию, то&amp;nbsp;добавьте дополнительные элементы в&amp;nbsp;массив 'rule', и&amp;nbsp;обрабатывайте их&amp;nbsp;как дополнительные параметры (после основного параметра $data) в&amp;nbsp;вашей функции.&lt;br />
&lt;br />
Ваша функция для&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">
Помните,&amp;nbsp;что&amp;nbsp;методы&amp;nbsp;модели/поведения&amp;nbsp;проверяются&amp;nbsp;первые,&amp;nbsp;перед&amp;nbsp;поиском&amp;nbsp;метода&amp;nbsp;в&amp;nbsp;классе&amp;nbsp;Validation.&amp;nbsp;&lt;br />Это&amp;nbsp;означает,&amp;nbsp;что&amp;nbsp;вы&amp;nbsp;можете&amp;nbsp;заменить&amp;nbsp;существующие&amp;nbsp;методы&amp;nbsp;валидации&amp;nbsp;(такие,&amp;nbsp;как&amp;nbsp;alphaNumeric())&amp;nbsp;&lt;br />на&amp;nbsp;уровне&amp;nbsp;приложения&amp;nbsp;(добавив&amp;nbsp;метод&amp;nbsp;в&amp;nbsp;AppModel),&amp;nbsp;или&amp;nbsp;на&amp;nbsp;уровне&amp;nbsp;модели.&lt;/span>
&lt;/code>&lt;/div>&lt;!--/notypo-->&lt;br />
&lt;br />
&lt;span class="missingpage">&amp;lt;&amp;lt; Встроенные правила валидации&lt;/span>&lt;a href="http://cake-php.ru/wiki/CoreRules/edit?add=1" title="Создать эту страницу">?&lt;/a> | &lt;span class="missingpage">Валидация данных из&amp;nbsp;контроллера &amp;gt;&amp;gt;&lt;/span>&lt;a href="http://cake-php.ru/wiki/FromController/edit?add=1" title="Создать эту страницу">?&lt;/a>&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
