4

I'm using a custom Widget for date fields, and I want to use it in all my forms. The problem is that symfony uses the default sfWidgetFormDate. What I want is to change this default widget in order to generate forms with my custom Widget. I don't want to change by hand all the forms generated.

The only approach I have found is the trik of modify 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',
            ));
        }
    }
}

2 Answers 2

5

What you could do is create your own form generator class.

class myFormGenerator extends sfDoctrineGenerator
{

  public function getWidgetClassForColumn($column)
  { 
    switch ($column->getDoctrineType())
    {
      case 'date':
        return 'sfWidgetFormJQueryDate';
        break;
      default:
        return parent::getWidgetClassForColumn($column); 
    }
  }
}

Save that somewhere sensible in your lib folder, clearing the cache etc..

Then rerun your for generator like so...

php doctrine:build-forms --generator-class='myFormGenerator'

I haven't tried any of the above, but the theory is sound I think...

Have a look at the following files to see where I figured this out from:

lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/task/sfDoctrineBuildFormsTask.class.php
lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineFormGenerator.class.php
Sign up to request clarification or add additional context in comments.

Comments

0

Following johnwards answer, as I want to define default options for the widget, I also override the function to do that:

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); 
    }
  }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.