Мне нравится обертывать $_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
}
сообщения и его друзья все происходят от базового класса, который реализует проверочный код ядра, добавив свои собственные конкретные функции, как формы тоны, конфигурация cookie сеанса, что угодно.
Внутри класса хранится набор достоверных данных, извлеченных из $_POST
при вызове методов проверки, а затем возвращает их как свойства с использованием магического метода __get
. Невозможно получить доступ к полям с ошибкой.Мои методы проверки достоверности (кроме required
) не сбрасываются при пустых полях, и многие из них используют func_get_args
, чтобы позволить им работать с несколькими полями одновременно. Некоторые из методов (например, money
) автоматически преобразуют данные в пользовательские типы значений.
В случае ошибки у меня есть способ преобразовать данные в формат, который можно сохранить в сеансе и использовать для предварительного заполнения формы и выделения ошибок после перенаправления на исходную форму.
Одним из способов улучшить это было бы сохранение информации о проверке в классе формы, которая используется для визуализации проверки формы и мощности на стороне клиента, а также для очистки данных после отправки.
Переведите нужные данные в переменные после их проверки, так как данные в нем есть подозрение до подтверждения. –
Ваш подход необычен, и наложение суперглобала на локальный атрибут может смутить разработчиков кода. Но это, конечно, законно, и если ваш объект использует или фильтрует его (например, помощник конфигурации), вероятно, хорошая идея. – mario