我用的是PropelBundle的Symfony 2.1窗體,我試圖重構一個有對象下拉列表(從中進行選擇)的表單,而不是使用jQuery自動填充字段(使用AJAX)。對於下拉列表,我在我的表單類型使用下面的代碼(這非常完美的下拉列表):如何在Symfony2表單中爲集合添加自動填充字段並使用Propel?
$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,
));
而提供一點背景知識的緣故,讓我們說,我們正在創造一個新的「閱讀器「對象,並且我們希望從可用的」書籍「對象列表中選擇讀者喜愛的書籍。使用集合類型,可以在新的「閱讀器」表單中選擇許多「喜歡的書」。現在,我想改變上面的使用自動完成。爲此,我嘗試實施Data Transformer to be able to get a Book object from a simple text field,該功能可用於自動填充功能,以傳遞書籍ID,如the answer to this Question中所示。但是,我無法弄清楚如何使數據轉換器與集合類型和Propel類一起工作。我創建了一個BookToIdTransformer類如Symfony的食譜指示,試圖在「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)
);
通過上述,我得到一個「調用未定義的方法:的getId」異常(顯然變壓器預期書的PropelCollection,不是一個Book對象..)。有誰知道如何去做呢?或者讓我知道是否有其他方法可以使用Propel在Symfony中實現自動完成,並允許選擇多個對象(例如書籍集合)?
感謝您的詳細解釋。如果您有許多控制器操作應該返回JSON響應,我建議您使用FOSRestBundle – Narretz 2013-01-24 14:56:52
您可以添加視圖/表單的片段嗎? – timaschew 2013-06-20 05:53:03
@timaschew如果我記得不錯(我最終不需要它),視圖中的代碼只是用於symfony表單的標準代碼。該字段是常規文本輸入。 Tokeninput插件使用輸入的id使用javascript添加自動完成功能:$(「#my-text-input」)。tokenInput(「/ url/to/your/script /」); – RayOnAir 2013-06-21 00:06:08