相关疑难解决方法(0)

如何在Symfony2表单中为集合添加自动完成字段并使用Propel?

我正在使用带有PropelBundle的Symfony 2.1表单,我正在尝试重构一个具有下拉列表对象(从中选择)的表单,而不是使用jquery自动完成字段(使用AJAX).对于下拉列表,我在表单类型中使用以下代码(对于下拉列表非常有效):

$builder->add('books', 'collection', array(
    'type'          => 'model',
    'options'       => array(
        'class'     => 'MyVendor\MyBundle\Model\Book',
        'property'  => 'title',
    ),
    'allow_add'     => true,
    'allow_delete'  => true,
    'by_reference'  => false,
    'required'      => false,
));
Run Code Online (Sandbox Code Playgroud)

对于给一点背景知识的缘故,让我们说,我们正在创造一个新的"阅读器"对象,我们想从现有的"书"对象的列表中选择读者喜爱的书籍.使用集合类型,以便可以在新的"阅读器"表单中选择许多"最喜欢的书籍".现在,我想更改上面的内容以使用自动完成功能.为此,我尝试实现一个Data Transformer,以便能够从简单的文本字段获取Book对象,该文本字段可用于自动完成功能,以传递本问题答案中指示的Book ID .但是,我无法弄清楚如何使Data Transformer与集合类型和Propel类一起工作.我创建了一个BookToIdTransformer类,如Symfony Cookbook中所示,并在"ReaderType"文件中尝试了以下内容:

$transformer = new BookToIdTransformer();
$builder->add(
        $builder->create('books', 'collection', array(
            'type'          => 'text',
            'allow_add'     => true,
            'allow_delete'  => true,
            'by_reference'  => false,
            'required'      => false,
        ))->addModelTransformer($transformer)
);
Run Code Online (Sandbox Code Playgroud)

有了上面的内容,我得到了一个"调用未定义的方法:getId"异常(显然,Transformer期望一个PropelCollection of Books,而不是一个Book对象......).有谁知道如何去做?或者让我知道是否有其他方法可以使用Propel在Symfony中实现自动完成并允许选择多个对象(例如书籍集合)?

propel symfony-forms symfony-2.1

9
推荐指数
1
解决办法
2万
查看次数

标签 统计

propel ×1

symfony-2.1 ×1

symfony-forms ×1