Symfony 6 и Easy Admin: добавьте в форму поля, которые не являются частью сущности

1
7

Быстрый вопрос, надеюсь, легко решаемый, я просто застрял.

Допустим, у меня есть таблица User, в которой есть строковый столбец address. Используя пакет EasyAdmin, я могу очень легко сделать это:

Это великолепно для моего табличного представления, но что, если я хочу разделить адрес на street, houseNumber и zipCode в моем потоке создания? Мой адрес имеет такую ​​форму: street houseNumber, zipCode и он определен в этом классе:

Теперь мне нужно найти способ разделить адрес на 3 поля формы при редактировании и создании и объединить их обратно после отправки формы.

yield TextField::new('address', 'Address')->onlyOnIndex();
<?php

declare(strict_types=1);

namespace App\Domain\UserManagement\VO;

use Assert\Assertion;
use Assert\AssertionFailedException;

final class Address
{
    private string $address;

    public function __construct(private string $street, private string $houseNumber, private string $zipcode)
    {
        $this->validateStreet($this->street);
        $this->validateZipcode($this->zipcode);

        $this->createAddress();
    }

    public function value(): string
    {
        return $this->address;
    }

    private function createAddress(): void
    {
        $this->address = $this->street . ' ' . $this->houseNumber . ', ' . $this->zipcode;
    }

    private function validateStreet(string $street): void
    {
        try {
            Assertion::notEmpty($street, 'Street cannot be empty');
            Assertion::string($street, 'Street must be a valid string');
            Assertion::minLength($street, 1, 'Street cannot be blank');
        } catch (AssertionFailedException $e) {
            throw new \InvalidArgumentException($e->getMessage());
        }
    }

    private function validateZipcode(string $zipcode): void
    {
        try {
            Assertion::numeric($zipcode, 'Zipcode must contain only numbers');
        } catch (AssertionFailedException $e) {
            throw new \InvalidArgumentException($e->getMessage());
        }
    }
}
Лонгин
Вопрос задан15 марта 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.