我有一个表TableModule,有 2 个外键,比如说fk1和fk2。
fk1到表1中的pk1
fk2到表2中的pk2
我创建了一个模块。假设Module,它使用TableModule(带有fk's 的那个)
我想为这些fk创建 4 个过滤器:2 个输入文本和 2 个下拉菜单。特别是,我想为每个 fk创建两个过滤器。这是:
For fk1 I would get:
-InputText
-Dropdown (choice in propel)
For fk2 I would get:
-InputText
-Dropdown (choice in propel)
当然,这将显示Table1和Table2的结果。
现在,在我的config.yml中,我得到了:
...
filter:
display: [fk1, fk1TextFilter, fk2, fk2TextFilter]
...
这是:fk1和fk2将作为下拉列表过滤,必须自定义部分 fk1TextFilter 和 fk2TextFilter 以使用文本输入 进行过滤。
为什么我创建了这些部分?因为我不能复制 config.yml 中的 fk !!
在lib/filter/table1/ModuleFormFilter
我做了(注意在table1中):
public function configure()
{
$this->setWidgets(array(
'fk1' => new sfWidgetFormPropelChoice(array('model' => 'table1', 'add_empty' => true,)),
'fk1TextFilter' => new sfWidgetFormInput(),
'fk2' => new sfWidgetFormPropelChoice(array('model' => 'table2', 'add_empty' => true,)),
'fk2TextFilter' => new sfWidgetFormInput(),
));
$this->setValidators(array(
'fk1TextFilter' => new sfValidatorPropelChoice(array('model' => 'table1', 'column' => 'id', 'required' => false)),
'fk1' => new sfValidatorPropelChoice(array('model' => 'table1', 'column' => 'id', 'required' => false)),
'fk2TextFilter' => new sfValidatorPropelChoice(array('model' => 'table2', 'column' => 'id', 'required' => false)),
'fk2' => new sfValidatorPropelChoice(array('model' => 'table2', 'column' => 'id', 'required' => false)),
));
$this->validatorSchema->setPostValidator(
new sfValidatorPropelUnique(array('model' => 'table2', 'column' => array('fk2')))
);
$this->widgetSchema->setNameFormat('model[%s]');
$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
}
这是:如前所述,创建了 2 个 textInput 和 2 个下拉菜单。
如果我使用 - 可能是输入文本或下拉列表 - 只是fk这将正常工作。问题是我无法复制 fk 的. 我不能这样做:
$this->setWidgets(array(
'fk1' => new sfWidgetFormPropelChoice(array('model' => 'table1', 'add_empty' => true,)),
'fk1' => new sfWidgetFormInput(),
'fk2' => new sfWidgetFormPropelChoice(array('model' => 'table2', 'add_empty' => true,)),
'fk2' => new sfWidgetFormInput(),
));
如果我运行我得到的页面:
You must define a "filterByfk1TextFilter" method in the ModelQuery class to be able to filter with the "fk1TextFilter" field.
我找到了一些链接(1、2),但对我不起作用。我在 symfony 文档中没有具体的例子。
我必须创建什么以及如何创建?
到目前为止,我有同样的lib/filter/table1/ModuleFormFilter
:
public function getFields()
{
$fields = parent::getFields();
$fields['fk1TextFilter'] = 'fk1TextFilter';
$fields['fk2TextFilter'] = 'fk2TextFilter';
return $fields;
}
public function addModelfk1TextFilterQuery($query, $field, $value)
{
//add your filter query!
//for example in your case
$rootAlias = $query->getRootAlias();
$query = ModelQuery::create()
->filterByfk1TextFilter()
->find();
//remember to return the $query!
return $query;
}
不适合我。请问你能帮帮我吗??