我正在为日期字段使用自定义Widget,我想在我的所有表单中使用它。问题是symfony使用默认的sfWidgetFormDate。我想要的是更改此默认小部件,以便使用我的自定义Widget生成表单。我不想手工更改生成的所有表格。
我找到的唯一方法是修改BaseFormDoctrine.php:
public function setup()
{
foreach($this->getWidgetSchema()->getFields() as $name=>$widget)
{
if($widget instanceof sfWidgetFormDate)
{
$this->widgetSchema[$name] = new sfWidgetFormJQueryDate(array(
'config' => '{}',
'image'=>'/images/calendar.png',
));
}
}
}
答案 0 :(得分:5)
您可以做的是创建自己的表单生成器类。
class myFormGenerator extends sfDoctrineGenerator
{
public function getWidgetClassForColumn($column)
{
switch ($column->getDoctrineType())
{
case 'date':
return 'sfWidgetFormJQueryDate';
break;
default:
return parent::getWidgetClassForColumn($column);
}
}
}
保存在lib文件夹中合理的位置,清除缓存等。
然后像这样重新运行你的发电机......
php doctrine:build-forms --generator-class='myFormGenerator'
我没有尝试过任何上述内容,但我认为这个理论很合理......
查看以下文件,了解我从中得出的结论:
lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/task/sfDoctrineBuildFormsTask.class.php
lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineFormGenerator.class.php
答案 1 :(得分:0)
在johnwards回答之后,由于我想为窗口小部件定义默认选项,我还会覆盖执行此操作的函数:
class myFormGenerator extents sfDoctrineFormGenerator
{
public function getWidgetClassForColumn($column)
{
...
}
public function getWidgetOptionsForColumn($column)
{
switch ($column->getDoctrineType())
{
case 'date':
return "array('config' => '{}', 'image'=>'/images/calendar.png')";
break;
default:
return parent::getWidgetOptionsForColumn($column);
}
}
}