Symfony 7 — правильный способ повторного использования частей общих форм со многими сущностямиPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Symfony 7 — правильный способ повторного использования частей общих форм со многими сущностями

Сообщение Anonymous »

Мне нужно проверить, правильно ли я думаю.
Мое приложение позволяет публиковать рекламу на сайте. У меня есть много объектов с похожими полями. Например, рассмотрим такой подход:
У меня есть 3 объекта:
  • Клиент (содержит: идентификатор, имя, описание)
  • Реклама (содержит: идентификатор, имя, описание, адрес1, адрес2, город)
  • Адрес доставки: (содержит: идентификатор, адрес1, адрес2, город )
У меня есть два признака (чтобы избежать многократного объявления одних и тех же свойств объекта):
BaseTrait: имя, описание
AddressTrait : адрес1, адрес2, город
И у меня есть 2 настраиваемых поля формы:
  • адрес (содержит: адрес1, адрес2 , город)
  • baseInfo (содержит: имя, описание)
Моя цель — использовать поля адреса и baseInfo, чтобы объединить их в одном поле и прикрепить ограничения от сущности к полям, включенным в эти настраиваемые поля, например:

Код: Выделить всё

class Advertisement {
// My entity
#[Assert\NotBlank]
private string $name;

#[Assert\NotBlank]
private string $description;

#[Assert\NotBlank]
private string $address1;

#[Assert\NotBlank]
private string $address2;

#[Assert\NotBlank]
private string $city;

Код: Выделить всё

//Form
$builder->add('baseInfo', BaseType::class, [ // Map properties from this field to Advertisement properties: name, description
$builder->add('address', AddressType::class, [ // Map properties from this field to Customer properties: address1, address2, city
Поэтому после отправки формы у меня должны появиться ошибки для полей имени, описания, адреса1, адреса2, города, когда они будут пустыми (потому что Entity определяет ограничения NotBlank).
Я хотел бы сделать то же самое (повторно использовать некоторые из моих настраиваемых полей) с другими объектами, например:

Код: Выделить всё

class Customer {
// My entity
#[Assert\NotBlank]
private string $name;

#[Assert\NotBlank]
private string $description;

#[Assert\NotBlank]
private string $anotherProperty;

Код: Выделить всё

//Form
$builder->add('baseInfo', BaseType::class, [ // Map properties from this field to Customer properties: name, description
$builder->add('anotherProperty', TextType::class
Аналогично, имя поля, описание должны иметь ограничения от Entity
Я пробовал много вещей из документации ChatGPT или Symfony, но безуспешно . Когда я пытаюсь добавить настраиваемое поле, я не могу установить отображение=>true, поскольку адрес свойства/baseInfo не существует внутри объекта (это логично). Когда я указываю Mapping=>false, проверка пропускается.
Я пытался объединить группы проверки, но тоже не повезло. Кажется, в документации Symfony ничего не сказано о том, как вкладывать поля Entity в настраиваемый тип формы с настраиваемыми полями (с ограничениями).
Я не делился здесь своим кодом, потому что я интересно, правильно ли я думаю. Возможно, я мог бы решить эту проблему с помощью родительского абстрактного класса или создать полную форму на основе какого-то интерфейса и т. д. Но это означает, что для (например, 50 сущностей) мне придется создать 50 похожих или уникальных форм, что для меня является ненужным усилием.
Итак, как мне решить эту проблему, чтобы не повторять слишком много кода?

Подробнее здесь: https://stackoverflow.com/questions/791 ... y-entities
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»