2010-05-21 2 views
4

날짜 필드에 사용자 정의 위젯을 사용하고 있으며 모든 양식에서 사용하고 싶습니다. 문제는 심포니가 기본 sfWidgetFormDate를 사용한다는 것입니다. 내가 원하는 것은 사용자 정의 위젯으로 양식을 생성하기 위해이 기본 위젯을 변경하는 것입니다. 저는 모든 양식이 손으로 변경되기를 원하지 않습니다.Symfony forms : 폼 생성을위한 기본 위젯을 변경하는 방법

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

답변

5

당신이 할 수있는 것은 자신의 폼 생성기 클래스를 만들 수 있습니다 :

내가 찾은 유일한 방법

은 수정 BaseFormDoctrine.php의 TRIK입니다. ... 그런 다음 캐시 등

을 취소과 같이 발전기 당신을 다시 실행하여 lib 폴더 어딘가에 분별이

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

내가 중 하나를 시도하지 않은

class myFormGenerator extends sfDoctrineGenerator 
{ 

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

저장 위의,하지만 이론은 소리가 나는 것 같아요 ...

다음 파일을보고 내가 알아 낸 부분을 확인하십시오 :

나는 위젯의 기본 옵션을 정의 할로
lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/task/sfDoctrineBuildFormsTask.class.php 
lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineFormGenerator.class.php 
+0

우수함! 나는 그것을 시험해보고 작동했다. – caymcorp

0

johnwards 다음 대답은, 나 또한 그렇게 할 기능을 오버라이드 (override) :

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); 
    } 
    } 
} 
관련 문제