我正在使用带有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中实现自动完成并允许选择多个对象(例如书籍集合)?