gpt4 book ai didi

php - Symfony 2 原型(prototype)内的原型(prototype) - 双 $$name 字段

转载 作者:行者123 更新时间:2023-12-01 03:01:05 25 4
gpt4 key购买 nike

我需要一些有关原型(prototype)内原型(prototype)的帮助。 Symfony 在生成表单原型(prototype)方面非常聪明,但是一旦你向下一层(即原型(prototype)中的原型(prototype)),它就会为两个原型(prototype)重用 $$name$$。

这就是我的实体的原型(prototype)字段的样子。 JQuery 将 $$name$$ 替换为正确的索引值(基于子节点的数量)

 <input type="text" id="entry_entities_$$name$$_contactFax" name="entry[entities][$$name$$][contactFax]" value="" />

到目前为止一切顺利。但是当你更深入一层时,Symfony 也会使用 $$name$$ 来表示下一层 - 这是实体属性的原型(prototype):

<div id="entry_entities_123_properties" data-prototype="    
&lt;label for=&quot;entry_entities_$$name$$_properties_$$name$$_name&quot;&gt;Name&lt;/label&gt;
&lt;input type=&quot;text&quot; id=&quot;entry_entities_$$name$$_properties_$$name$$_name&quot; name=&quot;entry[entities][$$name$$][properties][$$name$$][name]&quot; value=&quot;&quot; /&gt;

这意味着(在此示例中,实体 ID 为 123)所有属性都获得 ID 123:

name="entry[entities][123][properties][123][name]"
name="entry[entities][123][properties][123][name]"
name="entry[entities][123][properties][123][name]"

等等

在我看来,解决这个问题的最好方法是使用 $$somethingelse$$ 作为属性 - 有谁知道这是在哪里设置的 - 或者有没有人有一个完整的 JS 示例来解决这个问题?我开始对每行第二个 $$name$$ 进行可怕的查找/替换,但它变得非常困惑。我确信有一种简单的方法可以做到这一点,但我在互联网上找不到任何指南。

最佳答案

此代码适用于 symfony 2.0(在 2.1+ 中,您只需将名称传递给 prototype() 函数):

您可以使用所需的选项创建自己的集合类型:

<?php

namespace YourBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\Extension\Core\EventListener\ResizeFormListener;
use Symfony\Component\Form\Extension\Core\Type\CollectionType as BaseCollectionType;

class CollectionType extends BaseCollectionType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilder $builder, array $options)
{
if ($options['allow_add'] && $options['prototype']) {
$prototype = $builder->create($options['prototype_name'], $options['type'], $options['options']);
$builder->setAttribute('prototype', $prototype->getForm());
}

$listener = new ResizeFormListener(
$builder->getFormFactory(),
$options['type'],
$options['options'],
$options['allow_add'],
$options['allow_delete']
);

$builder
->addEventSubscriber($listener)
->setAttribute('allow_add', $options['allow_add'])
->setAttribute('allow_delete', $options['allow_delete'])
;
}

/**
* {@inheritdoc}
*/
public function getDefaultOptions(array $options)
{
$defaultOptions = parent::getDefaultOptions($options);
$defaultOptions['prototype_name'] = '$$name$$';
return $defaultOptions;
}
}

然后只需定义一个服务:

tags:
- { name: form.type, alias: collection }

并将其用作 Symfony 的集合,但带有prototype_name参数。

关于php - Symfony 2 原型(prototype)内的原型(prototype) - 双 $$name 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com