![](/img/trans.png)
[英]Symfony2 base64 in Entity to File in Form (and inverse) using 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.