我有一個表,TableModule,與2個外鍵重複鍵,讓我們說FK1和FK2。Symfony 1.4:創建自定義過濾器。外鍵,並用不同的過濾器(推進)
FK1進入PK1在表表1
FK2進入PK2在表表2
我創建的米odule。比方說,模塊,它使用TableModule(一個與FK的)
我想對那些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)
當然,這將顯示的表1和結果表2。現在
,在我config.yml我:
...
filter:
display: [fk1, fk1TextFilter, fk2, fk2TextFilter]
...
這就是:FK1和FK2將被過濾爲下拉菜單,將諧音fk1TextFilter和fk2TextFilter必須進行自定義以使用文本輸入進行過濾。
爲什麼我創建了那些partials?因爲我不能在config.yml中複製fk!
在lib/filter/table1/ModuleFormFilter
我做了(請注意,是在表1):
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;
}
是不是爲我工作。請問你能幫幫我嗎??
這不提供要回答這個問題,要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的聲望,你就可以評論任何帖子。 – Kmeixner 2015-06-09 21:24:17