У меня есть объект Address, для которого требуется страна. В связанной форме я использую Symfony CountryType, который отображает удобный для пользователя выбор стран и сохраняет его аббревиатуру в сущности (например, DE для Германии или CH для Швейцарии).
Чтобы отобразить страну адреса в действии show на панели администратора, я использую следующую строку в easy_admin.yaml:
- { property: country, label: 'address.entity.country' }
Проблема:
Это отображает только аббревиатуру, а не фактическое название страны. Как я могу это изменить?
Страна в адресном объекте:
/**
* @ORM\Column(type = "string", length=255)
*/
private $country;
В самом классе сущности нет ничего особенного, поскольку он хранит только аббревиатуру страны в виде строки. Я добавил атрибут страны выше.
брат, я хочу увидеть твой метод __toString?
Зачем мне нужен метод toString? Я показываю содержимое атрибута страны, а не сам класс адреса.




Думаю, лучшим решением будет использовать встроенный Компонент Symfony intl.
composer require symfony/intl для установки компонента.
Тогда в вашем объекте вы можете use Symfony\Component\Intl\Intl;.
Я предлагаю создать новое свойство для вашей сущности с именем countryName, где установщик этого свойства будет вызываться всякий раз, когда вы устанавливаете код страны. Ваш сеттер может выглядеть примерно так:
public function setCountryName (string $countryCode)
{
$this->countryName = Intl::getRegionBundle()->getCountryName(strtoupper($countryCode));
}
Затем в вашем файле yaml измените address.entity.country на address.entity.countryName.
Нет необходимости в сеттере, вместо этого проще просто создать EntityName::getLocalizedCountry(), который вернет Intl, который вы добавили в свой фрагмент кода, и будет использовать $this->country из объекта :)
Но сможете ли вы использовать эту функцию в файле yaml программы easy admin?
не могли бы вы вставить класс сущности addrss?