CakePHP IBM Tutorial: Неверный документ API для Model :: validate ()? - PullRequest
0 голосов
/ 24 октября 2009

Хорошо, это сводит меня с ума. Я работаю над Учебным пособием по IBM CakePHP, и в первой части я нахожусь в разделе, где автор вводит правила проверки для ввода формы:

www.ibm.com / DeveloperWorks / с открытым исходным кодом / учебники / ОС-PHP-cake1 / section5.html # N107E3

Что касается меня, я не могу понять, что происходит в этой строке кода:

$this->invalidate('username_unique');

Согласно документации CakePHP, метод Model :: invalidate () принимает в качестве первого параметра строку, которая задает «Имя поля для аннулирования». Как «username_unique» имя поля для проверки? Похоже, это должно быть просто старое «имя пользователя». Но как ни странно, авторский код работает, а мой - нет, когда я меняю «username_unique» на «username» (или даже «User.username»), поэтому я думаю, что в документации может быть серьезный недостаток (или очень возможно, со мной).

[FWIW, я вижу, что CakePHP 1.25 обеспечивает лучшее средство для проверки, но я все еще беспокоюсь, что то, что кажется хорошо документированным методом, похоже, не выполняет то, что рекламируется, и я хочу понять, почему учебный код работает.]

Может кто-нибудь пролить свет на это?

1 Ответ

4 голосов
/ 24 октября 2009

В данном случае "магия" на самом деле находится в $form.

При вызове $this->invalidate('username_unique') Cake принимает к сведению, что поле username_unique недопустимо. Тот факт, что это поле на самом деле не существует, не имеет значения.

Теперь еще раз взглянем на фактическое поле $form (слегка переформатированное):

echo $form->input('username', array(
    'after' => $form->error('username_unique', 'The username is taken. Please try again.')
));

Это выводит нормальное поле формы, но «вручную» помещает вывод error() после поля формы. $form->error('username_unique', $message) означает "если в поле username_unique есть ошибка, выведите сообщение $message" . Таким образом, вы фактически помечаете мнимое поле как недействительное и вручную выводите сообщение об ошибке для этого мнимого поля.

И на самом деле, это куча устаревших программ, которые вы должны сразу забыть. Существует встроенный синтаксис для нескольких правил проверки для каждого поля , поэтому вы можете одновременно проверять длину и уникальность символов и даже получать разные сообщения об ошибках для каждого типа ошибок. Есть даже встроенное правило isUnique, поэтому вам даже не придется кодировать тест на уникальность вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...