首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自定义嵌套表单类型easyadmin

自定义嵌套表单类型easyadmin
EN

Stack Overflow用户
提问于 2021-12-06 16:12:40
回答 1查看 1.5K关注 0票数 1

我有一个实体用户和一个实体地址,它们位于OneToOne关系中。我想在EasyAdmin中的用户Crud中显示地址类型,而且我找不到像Symfony ->add('address', AddressType::class)那样的方法。我尝试了以下几种选择:

代码语言:javascript
运行
复制
CollectionField::new('address')
            ->setEntryIsComplex(true)
            ->setEntryType(AddressType::class)
            ->setFormTypeOptions([
                'by_reference' => false,
                'required' => true
            ]),

但是这使得用户能够添加他想要的地址,尽管我只是想要一个地址。

代码语言:javascript
运行
复制
AssociationField::new('address')->hideOnIndex()

这使得用户在列表中选择一个现有地址。这不是表单类型的嵌入。

有谁有主意吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-11 16:09:37

我找到的解决办法如下:

创建这样的地址字段

代码语言:javascript
运行
复制
<?php

namespace App\Field;

use App\Form\AddressType;
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface;
use EasyCorp\Bundle\EasyAdminBundle\Field\FieldTrait;

final class AddressField implements FieldInterface
{
    use FieldTrait;

    public static function new(string $propertyName, ?string $label = 'Address'): self
    {
        return (new self())
            ->setProperty($propertyName)
            ->setLabel($label)
            // this template is used in 'index' and 'detail' pages
            ->setTemplatePath('admin/field/address.html.twig')
            // this is used in 'edit' and 'new' pages to edit the field contents
            // you can use your own form types too
            ->setFormType(AddressType::class)
            ->addCssClass('field-address')
        ;
    }
}

然后在您的用户Crud控制器中使用它

代码语言:javascript
运行
复制
public function configureFields(string $pageName): iterable
{
  // Other fields

  yield AddressField::new('address'); // Your new address field
}

templates/admin/field/address.html.twig模板将如下所示

代码语言:javascript
运行
复制
{% if field.value is defined %}  
  <dl class="row justify-content-center">
    <dt class="col-3 text-right">City</dt>
    <dd class="col-9">{{ field.value.city }}</dd>
    <dt class="col-3 text-right">Address 1</dt>
    <dd class="col-9">{{ field.value.address1 }}</dd>
    <dt class="col-3 text-right">Address 2</dt>
    dd class="col-9">{{ field.value.address2 }}</dd>
  </dl>
{% endif %}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70248457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档