0

我的表单中有来自 simplecms 的实体 Page 的问题我想在数组 Extras 中添加一个项目,所以我在我的 formtype 中添加了它:

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Cmf\Bundle\SimpleCmsBundle\Doctrine\Phpcr\Page;

class PageType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title', 'text', array(
                'label' => 'Titre',
                'attr' => array('placeholder' => 'Titre complet de la page')
            ))
        ->add('name', 'text', array(
            'label' => 'Label',
            'attr' => array('placeholder' => 'nom-simplifie-de-la-page')
            ))
        ->add('body', 'ckeditor')
        ->add('locale', 'hidden')
        ->add('publishable')
            ->add('extras_link','text', array(
                'property_path' =>"extras['link']",
            ));                        
}

变量在 Page 类中(我不必重写它)和函数 removeExtra() 和 addExtra() 也是(我的表单营养所必需的)

/**
 * Add a single key - value pair to extras
 *
 * @param string $key 
 * @param string $value - if this is not a string it is cast to one
 */
public function addExtra($key, $value)
{
    $this->extras[$key] = (string) $value;
}

/**
 * Remove a single key - value pair from extras, if it was set.
 *
 * @param string $key
 */
public function removeExtra($key)
{
    if (array_key_exists($key, $this->extras)) {
        unset($this->extras[$key]);
    }
}

表单正在工作,但是当我提交时,它发现 removeExtra() 但不是 addExtra()

“找到公共方法“removeExtra()”,但在类 Symfony\Cmf\Bundle\SimpleCmsBundle\Doctrine\Phpcr\Page 上没有找到公共“addExtra()”

有人已经有这个问题了吗?或者知道如何在额外内容中添加数据?THX(对不起我的英语)

4

1 回答 1

1

不幸的是,这是表单层的限制。寻找正确方法的逻辑只找到一个带有一个参数的加法器。我们最终做的是使用 burgov/key-value-form-b​​undle :https ://github.com/Burgov/KeyValueFormBundle/

这需要在 SeoBundle 中启用这样的 PR:https ://github.com/symfony-cmf/SeoBundle/pull/158

从 Page::setExtras 中的代码我认为这应该已经可以工作了,尽管与 SeoBundle 上的 PR 类似的 PR 会使其效率更高一些。

于 2014-05-08T06:26:46.600 回答