Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Хранение/извлечение объектов из сессии.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Адекватный заголовок не придумал.
DelphinPRO
Отправлено: 16 Июля, 2015 - 15:53:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Я тут валидатор изобретаю.
Форма допустим описывается примерно так: http://pastebin[dot]com/EZanxCUM - набор полей, их типы, методы фильтрации и т.п.
Использование планируется примерно такое http://pastebin[dot]com/JwanR35a
В doRegistration() постом передаются данные из html-формы, дальше в валидатор и проверка.
Вот здесь заминка. Хочу, если форма не прошла валидацию, происходил редирект на html-форму и при этом после редиректа сохранились данные проверки для каждого поля и их введенные значения (для вставки в форму и отображения статуса каждого поля - валидно\невалидно).
Сохранить я, допустим, могу сериализованный объект в сессии.
Но вот как красиво его оттуда достать.

Очень не хочется писать (в методе registerForm() в примере) что-то типа такого:

PHP:
скопировать код в буфер обмена
  1. $form = core\Form::loadForm('registerForm');
  2. if (!$form) {
  3.     $form = new forms\RegisterForm('registerForm');
  4. }


или, имплементировав условие в loadForm(), передавать туда еще и класс формы

PHP:
скопировать код в буфер обмена
  1. $form = core\Form::loadForm('registerForm', __NAMESPACE__ . 'forms\RegisterForm');


Вторые сутки не сплю, мысля покоя не даёт, спасайте Улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
esterio
Отправлено: 16 Июля, 2015 - 16:15:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Из того что я понял, то мне кажеться подойдет фабрика, а уж фабрика пусть и занимаетсья созданием класса формы и данными з сессии. Причем можна сделать адаптер для разных пособов хранения (буть то база, редис или другое). Лично я баловался когда-то таким и пришел к виводу, что лучше контроллера или модели никто не знает как валидировать. Разясню: припустим у нас есть модел тот самый юзер. С юзером связаные операции регистрация, вход, востановление пароля и подтвержденние мыла. Делать 4 разных класса очень громоздко и куча копипасты. Делать один универсальный класс формы - куча условий (отображать, валидировать или нет). В том же Yii они зделали валидацию внутри модели, но у них повсемесно юзаеться ActiveRecord что тоже не есть айс и приводит к кучи визовов сетеров в контроллере. Как всегда нету серебяной пули и в данній момент мне больше всего импонирует конфигурация валидатора с помощю файлов, но не в модели а отдельно ибо это совсем другая сущонсть. Чтобы не плодить кучу конфигов для форм одной сущости должен быть неий ключ действия (примерно как в Yii on => scenario). А сами формы генерить в вюхе визвивая при этом хелпер который сам загоняет название и значения интпута по ключу, но не генерит сам инпут ибо задолбошся прописивать классы атрибуты и прочее (да и верстальщику проще). На счет ошибок тот же хелпер должен возвращать, а уже в вюхе обрабативать ошики (отображать рядом или все вместе вверху формы). такой способ по мне лучше. а все что очень часто повторяеться можн овинести в отдельные хелперы/модули/компоненты (например быстрый CRUD для админкы), которые обьединяют в себе все в одном
 
 Top
DelphinPRO
Отправлено: 16 Июля, 2015 - 16:29:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




esterio пишет:
что лучше контроллера или модели никто не знает как валидировать.

У меня есть объект FormField. И вот уж он единственный, кто точно знает как себя валидировать. Form от которого наследуются кастомные формы, содержит набор таких объектов.
Т.е. метод валидации формы еликом примерно такой
PHP:
скопировать код в буфер обмена
  1.         foreach ($this->_fields as $field) {
  2.             $field->validate();
  3.             if (!$field->isValid()) {
  4.                 $this->_isValid = false;
  5.             }
  6.         }

но это все внутренние мелочи валидатора. У меня проблема именно во внешнем апи.
чтобы было кратко и просто в использовании.

До фабричного метода у родительского класса (core\Form) я допер, но его использование не кажется мне удобным
PHP:
скопировать код в буфер обмена
  1. $form = core\Form::loadForm('registerForm', __NAMESPACE__ . 'forms\RegisterForm');

нужно передать имя формы (под которым она в сессии лежит) и конкретный класс
много писать приходится.

(Отредактировано автором: 16 Июля, 2015 - 16:31:09)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB