Мне нравится переносить $_SESSION
, $_POST
, $_GET
и $_COOKIE
в структуры ООП.
Я использую этот метод для централизации кода, который обрабатывает санацию и проверку, всенеобходимые isset ()
проверки, одноразовые значения, setcookie
параметры и т. д. Это также позволяет клиентскому коду быть более читабельным (и дает мне иллюзию, что он более удобен в обслуживании).
Может быть трудно обеспечить использованиетакого рода структура, особенно если есть несколько кодеров.С $_GET
, $_POST
и $_COOKIE
(я полагаю), ваш код инициализации может скопировать данные, а затем уничтожить суперглобальный.Возможно, умный деструктор мог бы сделать это возможным с помощью $ _SESSION (стереть $ _SESSION при загрузке, записать его обратно в деструктор), хотя я не пробовал.
Однако я обычно не использую эти методы принуждения.Привыкнув к этому, видеть $_SESSION
в коде вне класса сеанса выглядит странно, и я в основном работаю в одиночку.
EDIT
Вот пример клиентского кода, на случайэто помогает кому-тоЯ уверен, что рассмотрение любой из основных платформ даст вам лучшие идеи ...
$post = Post::load ();
$post->numeric ('member_age');
$post->email ('member_email');
$post->match ('/regex/','member_field');
$post->required ('member_first_name','member_email');
$post->inSet ('member_status',array('unemployed','retired','part-time','full-time'));
$post->money ('member_salary');
$post->register ('member_last_name'); // no specific requirements, but we want access
if ($post->isValid())
{
// do good stuff
$firstName = $post->member_first_name;
}
else
{
// do error stuff
}
Post и его друзья все происходят из базового класса, который реализует основной код проверки, добавляя свои собственные специфические функциикак токены формы, конфигурация файла cookie сеанса, что угодно.
Внутренне, класс содержит коллекцию допустимых данных, извлеченных из $_POST
при вызове методов проверки, а затем возвращает их как свойства, используя магию __get
метод.К ошибочным полям нельзя получить доступ таким образом.Мои методы проверки (кроме required
) не заканчиваются на пустых полях, и многие из них используют func_get_args
, чтобы позволить им работать с несколькими полями одновременно.Некоторые методы (например, money
) автоматически переводят данные в пользовательские типы значений.
В случае ошибки у меня есть способ преобразовать данные в формат, который можно сохранить в сеансе и использоватьдля предварительного заполнения формы и выделения ошибок после перенаправления на исходную форму.
Одним из способов улучшить это было бы сохранение информации проверки в классе Form, который используется для визуализации формы и поддержки клиентской стороны.проверка, а также очистка данных после отправки.