Я сделал довольно много уроков по литиуму (ссылки ниже на случай, если они помогут кому-то еще, а также чтобы показать, что я сделал свою домашнюю работу :), и я понимаю самые основные части создания моделей, видов, контроллеров и использованияMVC для создания записи БД на основе ввода формы.
Однако я новичок в MVC для веб-приложений и Lithium, и я не уверен, как мне писать свой код в более сложных ситуациях.Это общий вопрос, но у меня есть два конкретных вопроса проверки:
- Как проверить данные даты, отправленные из формы?
- Как проверить, что два пользователяполя электронной почты имеют одинаковое значение?
Я был бы очень признателен за любую помощь с этими вопросами, и конкретные примеры, подобные этому, также действительно помогут мне понять, как делать хорошее кодирование MVC в других ситуациях.!
Ввод даты - проверка данных, разбитых по нескольким входам формы
По причинам, связанным с пользовательским интерфейсом, в форме регистрации пользователям предлагается ввести свой DOB в трех полях:
<?=$this->form->field('birthday', array('type' => 'select', 'list' => array(/*...*/))); ?>
<?=$this->form->field('birthmonth', array('type' => 'select', 'list' => array(/*...*/))); ?>
<?=$this->form->field('birthyear', array('type' => 'select', 'list' => array(/*...*/))); ?>
Каков наилучший способ проверки этой серверной части?Я думаю, что я должен воспользоваться преимуществами автоматической проверки, но я не уверен, что лучший способ сделать это для набора переменных, которые на самом деле не являются частью Модели.Например:
- Должен ли я постобработать
$this->request->data
в UsersController
?Например, измените $this->request->data
внутри UsersController
перед передачей его в Users::create
. - Должен ли я извлечь поля формы из
$this->request->data
и использовать статический вызов Validator::isDate
внутри UsersController
? - Есть ли способ написать правило проверки в модели для комбинаций переменных формы, которые не являются частью модели?
- следует переопределить
Users::create
и выполнить всю дополнительную проверку и опубликовать-обрабатывать там?
Все они кажутся работающими, хотя некоторые кажутся немного уродливыми, и я не знаю, какие из них могут вызвать у меня серьезные проблемы в будущем.
[РЕДАКТИРОВАТЬ: тесно связана с этим проблема объединения трех полей формы в одно поле, которое будет сохранено в модели]
Запись по электронной почте - проверка двух полей формы идентичны, но сохраняется только одно
В соответствии со здравым смыслом и обычной практикой, форма регистрации просит пользователей указать свой адрес электронной почты дважды:
<?=$this->form->field('email_address'); ?>
<?=$this->form->field('verify_email_address'); ?>
Как мне написать правило автоматической проверки, которое проверяет эти два поля формыимеют то же значение, но сохраняют только email_адрес в базе данных?
Такое чувство, что это почти тот же вопрос, что и выше, потому что список возможных ответов, о которых я могу думать, тот же - поэтому я 'Я представляю это как один вопрос, но я был бы очень признателен за вашу помощь с обеими частями, так как я думаю, что решение этого вопроса будет тонким, различным и одинаково поучительным!
[РЕДАКТИРОВАТЬ: тесно связано спроблема заключается в том, чтобы не сохранять в моей модели и базе данных verify_email_address]
Некоторые фоновые чтения на Lithium
Я читал другие, но эти три урока помогли мне добраться туда, где я нахожусь с пользователями изарегистрироваться сейчас ...
Некоторые другие вопросы StackOverflow по тесно связанным темам (но не отвечая на них и не относящиеся к литию)
- Один ответ на этот вопросuestion предлагает создать отдельный контроллер (и модель, и ...?) - мне он не кажется «литиевым», и я боюсь, что он также может быть хрупким / легко глючить
- Эта замечательная история убедила меня, что я был прав, что беспокоился о том, чтобы поместить его в контроллер, но я не уверен, что будет хорошим решением
- Это на взглядах заставляет меня думать, что я должен каким-то образом поместить его в модель, но я не знаю, как лучше это сделать в Lithium (см. Мой маркированный список в разделе «Ввод даты» выше)
- И эта Презентация Scribd задала вопрос, на который я надеюсь ответить на последней странице ... после чего он остановился, не ответив на него!
Примечание: ответы в стиле CakePHP тоже хороши. Я не знаю, но это похоже, и я уверен, что могу перевести с него, если мне нужно!