在我的过滤器表单中,我想将默认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的同义词”)