[Moscow.pm] HTML::FormHandler, JSON, динамические формы: делал ли кто уже?

Dmitry L. dim0xff на gmail.com
Ср Июн 24 02:41:40 PDT 2015


Если у вас есть такая строчка
__PACKAGE__->load_components('InflateColumn::Serializer'), то должна.



2015-06-24 12:34 GMT+03:00 Alex Povolotsky <tarkhil на over.ru>:
> Из Client.pm:
>
> __PACKAGE__->add_columns(
>   "id",
>   {
>     data_type         => "integer",
>     is_auto_increment => 1,
>     is_nullable       => 0,
>     sequence          => "clients_id_seq",
>   },
>   "type",
>   { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
>   "data",
>   { data_type => "jsonb", is_nullable => 0, serializer_class => "JSON" },
> );
>
> то есть, как я понимаю, сериализация/десериализация должна делаться
> автоматом.
>
> On 23.06.2015 19:18, Dmitry L. wrote:
>> Так если у вас InflateColumn, то вам явно нужно сделать
>> ->set_inflated_columns для объекта модели.
>>
>> Я обычно переопределял update_model из HTML::FormHandler::TraitFor::Model::DBIC
>>
>>
>> 2015-06-23 18:15 GMT+03:00 Alex Povolotsky <tarkhil на over.ru>:
>>> HTML::FormHandlerX::Field::JSON - совсем не то. Он подстраивает вывод
>>> под json, а у меня форма строго определенная.
>>>
>>> Вообще, я пытаюсь связать HTML::FormHandler с DBIx::Class и
>>> DBIx::Class::InflateColumn::Serializer, но, если я не пытаюсь явно
>>> превратить хэш в json до передачи в модель, то
>>>
>>> SQL::Abstract::belch(): [SQL::Abstract::__ANON__] Warning: HASH ref as
>>> bind value in insert is not supported at
>>> /usr/local/lib/perl5/site_perl/HTML/FormHandler/TraitFor/Model/DBIC.pm
>>> line 85
>>> INSERT INTO clients ( data, type) VALUES ( ?, ? ) RETURNING id:
>>> 'HASH(0x80d751528)', '1'
>>>
>>>
>>> а если пытаюсь, то
>>>
>>> [Tue Jun 23 18:08:34 2015] [error] Can't use string
>>> ("{"region":null,"full_name":null,"...) as a HASH ref while "strict
>>> refs" in use at
>>> /usr/local/lib/perl5/site_perl/HTML/FormHandler/InitResult.pm line 144.
>>>
>>>
>>> On 23.06.2015 17:59, Dmitry L. wrote:
>>>> А для чего вы используете HFH? Валидация и рендер форм? Или только валидация?
>>>>
>>>> Если только для валидации, то никакой HFH::Field::JSON вам, наверное,
>>>> не нужен. Достаточно Compound.
>>>> Если кроме валидации ещё и формы рендерите, то посмотрите на
>>>> HTML::FormHandlerX::Field::JSON .
>>>>
>>>> Сам я отказался от HFH, из-за его тормознутости на Repeatable полях, и
>>>> сделал свой вариант https://github.com/dim0xff/p5-Form-Data-Processor
>>>> (но там только валидатор).
>>>> А эта штука https://github.com/dim0xff/p5-Form-Data-Processor-Field-Subforms
>>>> позволяет делать то, что вы хотите (типа, в зависимости от поля type
>>>> подставлять валидатор под данные, которые находятся в Compound поле
>>>> data)
>>>>
>>>> 2015-06-23 17:48 GMT+03:00 Alex Povolotsky <tarkhil на over.ru>:
>>>>> Велосипед в том, что у кого-то HTML::FormHandler::Field::JSON уже
>>>>> написан, просто до CPAN руки не дошли.
>>>>>
>>>>> Аналогично - с FH-классом для динамических форм с переключателем
>>>>>
>>>>> Грабли - я вроде бы пока никаких не вижу) но вдруг у меня кочка зрения
>>>>> неправильная?
>>>>>
>>>>> json в реляционной БД - говорят, вполне работает, и пошустрее, чем в
>>>>> иных NoSQL.
>>>>>
>>>>> On 23.06.2015 17:45, Dmitry L. wrote:
>>>>>> А в чём велосипед и какие грабли могут быть (я сейчас про сторону
>>>>>> перла говорю, а не про хранение json в реляционной бд)?
>>>>>>
>>>>>> 2015-06-23 17:29 GMT+03:00 Alex Povolotsky <tarkhil на over.ru>:
>>>>>>> Добрый вечер
>>>>>>>
>>>>>>> Есть задача (вполне классическая) - хранить базу клиентов. Система
>>>>>>> пишется на Mojolicious.
>>>>>>>
>>>>>>> Клиенты, естественно, бывают юридическими и физическими лицами.
>>>>>>>
>>>>>>> Возникла идея - пользуясь возможностями JSON в новом постгресе, хранить
>>>>>>> в базе внутренний номер клиента, тип и все остальные данные в JSON, по
>>>>>>> которому, при необходимости, и искать.
>>>>>>>
>>>>>>> Очевидная следующая идея - сделать компаунд-поле типа JSON, которое
>>>>>>> будет свертывать сериализатором все поля, при необходимости валидируя
>>>>>>> их, и динамическую форму с использованием HTML::FormHandler и
>>>>>>> обобщенного механизма создания "полей с JSON". Как мне кажется, штука
>>>>>>> может получиться неплохо повторно используемая.
>>>>>>>
>>>>>>> Делал ли кто-нибудь что-нибудь подобное? Возможно, я изобретаю велосипед
>>>>>>> или, наоборот, собираюсь гулять по полю самозарядных граблей?
>>>>>>>
>>>>>>> Alex
>>>>>>> --
>>>>>>> Moscow.pm mailing list
>>>>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>>>
>>>>>>
>>>>>>
>>>>> --
>>>>> Moscow.pm mailing list
>>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>
>>>>
>>>>
>>> --
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>>
>>
>>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org



-- 
//wbr, Dmitry L.


Подробная информация о списке рассылки Moscow-pm