CakePHP - Manual/CommonTasks/DataValidation/FromController /wiki/Manual/CommonTasks/DataValidation/FromController History/revisions of CakePHP/Manual/CommonTasks/DataValidation/FromController en-us 2009-04-01 17:13:18 /wiki/Manual/CommonTasks/DataValidation/FromController/show?time=2009-04-01+17%3A13%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 name=".manual.commontasks.datavalidation.fromcontroller" href="/wiki/Manual/CommonTasks/DataValidation/FromController" class="">/Manual&nbsp;/&nbsp;Common&nbsp;Tasks&nbsp;/&nbsp;Data&nbsp;Validation&nbsp;/&nbsp;From&nbsp;Controller</a> за <a href="/wiki/Manual/CommonTasks/DataValidation/FromController?time=2009-04-01+17%3A13%3A18">2009-04-01 17:13:18</a> и <a href="/wiki/Manual/CommonTasks/DataValidation/FromController">2009-04-11 21:30:24</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><br /> Обычно вы&nbsp;будете просто использовать метод модели save, но&nbsp;может быть вы&nbsp;захотите проверить данные без&nbsp;их&nbsp;сохранения. Например, вы&nbsp;можете захотеть отобразить для&nbsp;пользователя некоторую дополнительную информацию непосредственно перед её сохранением в&nbsp;базу данных. Проверка данных требует немного другие процессы в&nbsp;отличие от&nbsp;просто сохранения. <br /> <br /> Во-первых, передадим данные модели:<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?<br />$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ModelName</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">data&nbsp;</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> <br /> Затем, для&nbsp;проверки, проходят ли&nbsp;данные валидацию, используйте метод модели validates, который возвратит true в&nbsp;случае успешной валидации или&nbsp;false в&nbsp;обратном случае:<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?<br /></span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ModelName</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">validates</span><span style="color: #007700">())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;код&nbsp;для&nbsp;случая&nbsp;успешной&nbsp;валидацц<br /></span><span style="color: #007700">}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;код&nbsp;для&nbsp;случая,&nbsp;когда&nbsp;валидация&nbsp;не&nbsp;пройдена<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> <br /> Метод validates запускает метод invalidFields, который заполняет свойство модели validationErrors. Также метод invalidFields возвращает эти&nbsp;данные в&nbsp;качестве результата.<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?&nbsp;$errors&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ModelName</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">invalidFields</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;содержит&nbsp;массив&nbsp;validationErrors&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> <br /> Обратите внимание, что&nbsp;данные должны быть переданы модели перед тем, как&nbsp;они будут проходить проверку. Это&nbsp;отличается от&nbsp;метода save, который позволяет передавать ему&nbsp;данные в&nbsp;качестве параметра. Также помните, что&nbsp;не&nbsp;требуется вызывать validates перед вызовом метода save, так&nbsp;как save автоматически проверит данные перед их&nbsp;сохранением.<br /> <br /> Для&nbsp;проверки множества моделей используйте следующий код:<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?<br /></span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">Model</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">saveAll</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">data</span><span style="color: #007700">,&nbsp;array(</span><span style="color: #DD0000">'validate'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'only'</span><span style="color: #007700">)))&nbsp;{<br />&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;данные&nbsp;правильные<br /></span><span style="color: #007700">}&nbsp;else&nbsp;{<br />&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;данные&nbsp;некорректные<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> <br /> <span class="missingpage">&lt;&lt; Пользовательские правила валидации</span><a href="/wiki/CustomRules/edit?add=1" title="Создать эту страницу">?</a> | <span class="missingpage">Чистка данных &gt;&gt;</span><a href="/wiki/DataSanitization/edit?add=1" title="Создать эту страницу">?</a><br /></div></div>