簡體   English   中英

在Form中使用DataTransformer后訪問樹枝中的實體屬性

[英]Accessing entity attributes in twig after using DataTransformer in a Form

我使用以下代碼來創建自定義表單類型,該類型將實體轉換為id以便創建自動完成字段。

class EntityIdType extends AbstractType
{
    /**
     * @var EntityManager
     */
    private $em;

    /**
     * @param EntityManager $em
     */
    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $transformer = new EntityIdTransformer($this->em,$options['entity_class']);
        $builder->addModelTransformer($transformer);
    }
}

我還為該表單類型創建了一個自定義窗口小部件,我想獲取表示該實體上的字符串

{% block entity_id_widget %}
    {% spaceless %}
        <input type="hidden" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>
        <input autocomplete="off" value="{{ **GET_VALUE_HERE** }}">
    {% endspaceless %}
{% endblock %}

UPDATE

EntityIdTransformer的transform方法僅返回實體的ID,反向轉換返回與作為參數傳遞的ID相關聯的實體

所有這一切的目的是為具有許多行的實體創建自動完成輸入,並在提交表單時保留更改。 如果對於本示例而言,還有其他方法可能更好,我將對其加以說明。

似乎在PR中作為一個提案添加了一個entity_identifier字段類型,但似乎在不久的將來還不可用。

最后,我能夠從DataTransformer返回帶有ID和描述實體的字符串的數組的字符串

public function transform($entity)
{
    if (null === $entity) {
        return "";
    }

    return array("id" => $entity->getId(), "name" => $entity->__toString());
}

現在,在渲染我的自定義小部件時,我可以訪問這些值

{% block entity_id_widget %}
{% spaceless %}
    <input type="hidden" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value.id }}" {% endif %}/>
    <input class="blocked" autocomplete="off" {% if value is not empty %}value="{{ value.name }}" {% endif %}>
{% endspaceless %}
{% endblock %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM