感谢您的建议。我遇到的问题是访问自定义过滤器的值,以便我可以使用它来更改显示的列。最后,我是这样实现的:
在我的 FormFilter 类中,我配置了我的自定义小部件并添加了一个验证器。这迫使我添加一个方法 (add%sColumnQuery) 来处理该值,在该方法中我将值添加到用户对象以便将其存储以在其他地方检索(通常此方法将用于更改查询)。见下文:
类 ExpenditureFormFilter 扩展 BaseExpenditureFormFilter
{
公共功能配置()
{
父::配置();
$years = range((int)date("Y", strtotime(sfConfig::get('app_view_min_period'))), (int)date("Y", strtotime(sfConfig::get('app_view_max_period'))) );
$this->widgetSchema['start_period'] = new sfWidgetFormDate(array(
'格式' => '%month%/%year%',
'can_be_empty' => 假,
'months' => array_combine(range(1, 12), array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep' ', '十月', '十一月', '十二月')),
'years' => array_combine($years, $years)
));
$this->widgetSchema->setLabels(数组(
'start_period' => '开始周期',
));
$this->validatorSchema['start_period'] = new sfValidatorMonthYear(
大批(
'min' => strtotime(sfConfig::get('app_view_min_period')),
'max' => strtotime(sfConfig::get('app_view_main_period'))
),
大批(
'必需' => 真
)
);
}
公共函数 getFields()
{
$fields = 父级::getFields();
$fields['start_period'] = '日期';
返回$字段;
}
受保护的函数 addStartPeriodColumnQuery($query, $field, $value)
{
sfContext::getInstance()->getUser()->setAttribute('start_period', $value);
}
}
然后我覆盖了自动生成的 _list_td_tabular.php 部分(只需在模块模板目录中创建一个具有相同名称的副本即可轻松完成),在此我能够访问用户对象,因此我的过滤器值像这样:
$start_period = sfContext::getInstance()->getUser()->getAttribute('start_period');
所以现在我可以使用这个值来动态生成要在列表模板中显示的列 - 任务完成:)
当然,我很想知道是否有更好的方法,但这对我有用!
问候,
马特。