Я уже давно являюсь разработчиком PHP, но до сегодняшнего дня я не нашел простой способ обработки (ака нормализации, дезинфекции, проверки, заполнения и отображения форм и соответствующих полевых ошибок).
Я знаю, что большинство фреймворков PHP в настоящее время облегчают эту работу, но почему-то мне не хочется переносить весь мой код на одну из этих фреймворков, и я не могу понять, как, например, реализована проверка правильности формы в Django (I знаете, это Python, но мне очень нравится их подход), поэтому, хотя лучший способ для меня был бы опубликовать здесь, как я обрабатываю простую форму, и, возможно, вы, ребята, можете указать мне в лучшем направлении.
<?php // sample controller class _sample extends framework { // sample action function contact() { if ($this->Is->Post() === true) { $errors = array(); if ($this->Is->Set($_POST['name']) === false) { $errors['name'] = 'Please fill in your name.'; } if (($this->Is->Email($_POST['email']) === false) || ($this->Is->Set($_POST['email']) === false)) { $errors['email'] = 'Please fill in your email address.'; } if (($this->Is->Phone($_POST['contact']) === false) && ($this->Is->Mobile($_POST['contact']) === false)) { $errors['contact'] = 'Please fill in your phone (or cell phone) number.'; } if ($this->Is->Set($_POST['message']) === false) { $errors['message'] = 'Please type a message'; } // no errors, it's valid! if (empty($errors) === true) { // do stuff and redirect to "success" / "thank you" page } // load the form view, and let it display the errors // automatically prefill fields with $_POST values else { $this->View('contact_form', $errors); } } // load the form view for the first time else { $this->View('contact_form'); } } } ?>
Как вы можете видеть, это должна быть простая форма контакта, однако для ее проверки требуется жизнь, я изучал некоторые шаблоны проектирования (Observer, Factory), но я не уверен, что и каким образом Я должен их реализовать.
Вы можете создать абстрактный базовый класс для всех ваших форм, классов для типов полей и статический класс для проверки значений различных типов (validateString, validateHtml, validateEmail, validateNumber, date и т. Д., Только методы ..). Определив форму, вы определяете, какие объекты поля будут использовать, поэтому метод Form-> validate () будет вызывать Field-> validate () и вернуть отфильтрованное значение или сообщение об ошибке. Укажите сообщения об ошибках по умолчанию для полей, но дайте возможность переопределить их при определении полей в вашем классе формы.
О, и оставьте это _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Прочитайте сообщение один раз, передайте его один раз на проверку формы, а затем обработайте значения фильтрованных полей.
Другое дело, что существуют различные способы получения валидации формы в зависимости от ваших потребностей и архитектуры ваших приложений, может быть сложно сделать универсальный инструмент проверки формы, когда у вас есть различные подходы к дизайну вашего приложения. Выбирайте способ выполнения своей работы и придерживайтесь ее (независимо от того, готов ли он к работе с каркасом или вашим собственным кодом), или что бы вы ни писали в супер-пупер-форме, это будет бессмысленно в последних проектах.
Еще один: как Django? Хорошо! Поэтому начните программирование Python в Django, вы действительно измените способ мышления, как выполнить свою работу.
ИМХО, попытка рассматривать форму как единую концепцию является провалом. Если у вас есть какая-либо многоуровневая архитектура для вашего приложения, формы, скорее всего, пересекут их. У форм есть логика приложения (уровень контроллера), у них есть визуальное представление (уровень представления), у них есть состояние (модель прикладного уровня), и в конце они обычно вызывают какой-то транзакционный скрипт (слой модели).
Я думаю, что вам гораздо лучше отказаться от идеи «формы» как сущности и вместо этого сосредоточиться на трех частях (обработка ввода, рендеринг и слой модели) как на совершенно разные вопросы, которые могли бы (или не могли) быть тесно связанными друг с другом. Это несколько раз называют шаблоном MVC, хотя этот термин настолько сильно загружен, что это может означать много вещей.
Я знаю, что это то, что вы исключили, и я тоже был похож на вас до года назад, когда я заставил себя узнать что-то неясное, как Qcodo (php framework), и вот, я не могу ничего делать без него. Это просто замечательно, когда вы снимаете много всего, что всегда тянет тебя с плеч. Почему Qcodo? В то время я хотел узнать самые продвинутые, так как я уже учился, поэтому я искал самый широкий набор функций, который, по-видимому, предлагал Qcodo. Сегодня я не знаю, какой из них самый жаркий, но для меня Qcodo все еще выполняет все мои потребности.