将过滤器从选择更改为简单输入

时间:2012-03-26 10:42:21

标签: php forms symfony1 doctrine

在我的过滤器表单中,我想将默认sfWidgetDoctrineChoice更改为简单的sfWidgetFormFilterInput。 对于关系字段(例如,UserForm有一个字段PhoneNumberListId)。

目的是什么?

=> 当您拥有大量关系数据时,symfony(完全是DoctrineFormChoice小部件)将呈现包含所有(!)可能关系的select元素,导致网站崩溃。

点亮的一个例子:

表:用户,PhonenumberList 表格:UserFilterForm

基本上我们会在UserFilterForm中使用此代码:

$this->setWidgets(array(
'phonenumber_list_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('PhonenumberList'), 'add_empty' => true))));

我将其更改为:

$this->setWidget('phonenumber_list_id', new sfWidgetFormFilterInput(array('with_empty' => false)));
        $this->setValidator('phonenumber_list_id', new sfValidatorSchemaFilter('text', new sfValidatorNumber(array('required' => false))));

这对表单呈现有什么影响?

以前的选择:

<select name="user_filters[phonenumber_list_id]">

将改为:

<input name="user_filters[phonenumber_list_id][text]" >

我导致以下(对我来说无法解释)错误/异常:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
at Doctrine_Connection->execute('SELECT COUNT(*) AS num_results FROM receipt r WHERE r.partner_id IN (?) AND (r.deleted_at IS NULL)', array('text' => 1))

注意:receipt≘user,partner_id≘phonenumber_list

*符号“≘”在这里解释http://en.wikipedia.org/wiki/Equals_sign(例如“A≘B”,单词“A就像/是B的同义词”)

0 个答案:

没有答案