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