Я сделал несколько руководств по Lithium (ссылки ниже на случай, если они помогут кому-то еще, а также чтобы показать, что я сделал свою домашнюю работу :), и я понимаю самые основные части создания моделей, представлений, контроллеров и использования MVC для создания записи БД на основе ввода формы.
Тем не менее, я новичок в MVC для веб-приложений и Lithium, и я не знаю, как мне писать код в более сложных ситуациях. Это общий вопрос, но у меня есть два конкретных вопроса проверки:
Я был бы очень признателен за любую помощь с этими вопросами, и конкретные примеры, подобные этому, также действительно помогут мне понять, как делать хорошее кодирование MVC и в других ситуациях!
Из соображений пользовательского интерфейса форма регистрации просит пользователей ввести дату рождения в трех полях:
=$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
и выполнять там всю дополнительную проверку и постобработку?Кажется, что все они могут работать, хотя некоторые кажутся немного уродливыми, и я не знаю, какие из них могут вызвать у меня серьезные проблемы в будущем.
[EDIT: с этим тесно связана проблема объединения трех полей формы в одно поле для сохранения в модели]
Из соображений здравого смысла/здравой практики форма регистрации просит пользователей дважды указать свой адрес электронной почты:
=$this->form->field('email_address'); ?>
=$this->form->field('verify_email_address'); ?>
Как я могу написать правило автоматической проверки, которое проверяет, что эти два поля формы имеют одно и то же значение, но сохраняет только адрес электронной почты в базе данных?
Похоже, что это почти тот же вопрос, что и выше, потому что список возможных ответов, который я могу придумать, тот же, поэтому я представляю это как один вопрос, но я был бы очень признателен за вашу помощь с обе части, так как я думаю, что решение этой будет тонким, отличающимся и в равной степени поучительным!
[РЕДАКТИРОВАТЬ: С этим тесно связана проблема с отсутствием сохранения verify_email_address в моей модели и БД]
Я читал другие, но эти три руководства привели меня туда, где я есть. с пользователями и регистрационными формами сейчас...
Некоторые другие вопросы StackOverflow по тесно связанным темам (но без ответа на них, а также не относящиеся к Lithium)
NB: ответы в стиле CakePHP тоже подходят. Я не знаю, но это похоже, и я уверен, что смогу перевести с него, если мне нужно!