Laravel Вложенные формы

Absinthe

жожо
Каким образом удобнее сделать форму для связанных объектов Item и Property (item has many properties), где количество блоков Property различное (через JS добавлять новые можно).
Интересуют вопросы валидации и сохранения таких объектов.
 

Absinthe

жожо
Жаль, в некоторых других фреймворках это стандартный функционал.
Думал, что способ есть, просто не описан в документации (там много чего не описано).
 

Adelf

Administrator
Команда форума
@Absinthe, идеология ларавель, да и симфони - найди нужный пакет и юзай. Наверняка такой есть. Подцепляешь в require и начинаешь юзать.
Не обязан фреймворк содержать в себе всё на все случаи жизни.
 

Absinthe

жожо
На все случаи не обязан, но мы же про базовые вещи говорим. В большинстве проектов нужно будет редактировать 1..* объекты.
Получается, что встроенный функционал работает только для самых простых форм, а для вложенных - уже нет.
Работал в Rails с этим. Поэтому ожидал такого и от Laravel.
 

keltanas

marty cats
@Redjik, в Симфони можно. Но тоже не стоит. Там можно будет включить загрузку сраницы с формой и идти курить... )) Я на симфони обрабатываю только серверную валидацию. А верстка (или генерация верстки) формы на фронтенде.
 

Adelf

Administrator
Команда форума
Блин. Как раз было бы удобно мне сейчас :)
 

fixxxer

К.О.
Партнер клуба
А на каком уровне это предполагается? ;) Всякие exists и прочие unique на уровне application validation мне кажутся несколько ересью
 

Adelf

Administrator
Команда форума
@fixxxer, я говорил про левую часть выражений.

Всяким exists и unique в нормальном приложении места нет.
 

Absinthe

жожо
Всякие exists и прочие unique на уровне application validation мне кажутся несколько ересью
Было бы проще, если бы исключения ORM не были одного и того же типа.

К тому же как ты предлагаешь валидировать email при регистрации на уникальность? Добавление unique решает все проблемы с формой.
 

Adelf

Administrator
Команда форума
Валидация формы должна просто дать ответ, правильно ли юзер ввел данные. В правильном ли формате email.
То, что он неуникальный вдруг оказался, это не неправильные данные. Это просто логика приложения такая. И проверяться оно должно глубже.
 

Absinthe

жожо
Логично, мы смешиваем валидацию пользовательского ввода и логику приложения. А теперь представь разницу в количестве кода (нужно не только проверить, но и вернуть сообщение об ошибке в форму над нужным полем).
Покажешь такой код?
 

Adelf

Administrator
Команда форума
У меня сейчас такой. При попытке создать юзера, с email которого уже есть в базе, кидается Exception.

А еще у меня есть interface IErrorMessageException{} Пустой. Он лишь говорит о том, что если пошел Exception с таким interface и он не был отловлен в коде - его message можно показать юзеру.

И в Exceptions/Handler.php

PHP:
        if($e instanceof IErrorMessageException)
        {
            return redirect()->back()->with('error', $e->getMessage())->withInput();
        }
 

Absinthe

жожо
Не понял, как совмещаешь результат валидации формы и таких проверок (чтобы над каждым полем было о той ошибке, которая произошла из-за данных в нем).
Плюс что делать, если таких проверок надо несколько (для разных полей, например)?
 

Adelf

Administrator
Команда форума
Аа.. Не. Каждое поле я не показываю. У меня общий error message. Наверху формы. С полями сложнее было бы...

Моя главная идея - валидация формы не должна так хорошо знать приложение, чтобы самой лезть в базу и искать что-то там. Она считай пронзает все слои приложения, без всякого разрешения. Нехорошо.
 

Adelf

Administrator
Команда форума
@Absinthe, да не сильно то и сложно. Выделяем отдельно валидацию в бизнес-логике и вызываем ее напрямую после валидации формы. И поля подсветит оно тоже. Если договориться об именах полей.
 

Absinthe

жожо
Выделяем отдельно валидацию в бизнес-логике и вызываем ее напрямую после валидации формы. И поля подсветит оно тоже. Если договориться об именах полей.
То, как я себе представляю это, занимает много кода.

Особенно по сравнению с 5.2, где будут вложенные формы, и кроме правил валидатора ничего не надо будет делать.
 
Сверху