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

Alex Povolotsky tarkhil на over.ru
Ср Июн 24 02:34:52 PDT 2015


Из 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