2011-04-12 2 views
0

사용자가 symfony 응용 프로그램에서 양식을 개발 중입니다. 여기에서 사용자는 HTML select 요소를 사용하여 국가, 지역 및 옵션 아일랜드를 표시해야합니다.symfony sfWidgetFormDoctrine 선택 불러 오기 제한된 결과 집합으로 선택

세 가지 모델이 있습니다 : 국가, 지역 및 섬;

... 
'country_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Country'), 'add_empty' => false)), 
'region_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Region'), 'add_empty' => false)), 
'island_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Island'), 'add_empty' => true)), 
... 

국가 목록이 크고, 따라서 지역 목록, 나는 RegionIsland에서 사용할 수있는 옵션을 필터링에 생각해 봤는데 이후 :와 심포니는 sfWidgetFormDoctrineChoice 위젯을 사용하는 형태로 자동 생성 된 세 개의 위젯이있다 국가에서 선택한 값에 따라

jQuery의 change 메소드와 간단한 AJAX 요청을 사용하면 HTML 문서가 준비된 후에이 작업을 쉽게 수행 할 수 있습니다. 그러나 Symfony에서 직접 폼 구성을 사용하여 기본 결합 된 선택을 할 수있는 방법이 있는지 궁금합니다.

제안 사항?

감사합니다.

$countryId = $this->getObject()->getCountry()->getTable()->getDefaultCountryId(); 
$regionId = $this->getObject()->getRegion()->getTable()->getDefaultRegionId($countryId); 
$islandId = $this->getObject()->getIsland()->getTable()->getDefaultIslandId($regionId); 

$this->widgetSchema->setDefault('country_id', $countryId); 

$this->setWidget('region_id', new sfWidgetFormDoctrineChoice(array(
    'model' => $this->getRelatedModelName('Region'), 
    'query' => $this->getObject()->getRegion()->getTable()->getRegionsQuery($countryId), 
    'default' => $regionId, 
))); 

$this->setWidget('island_id', new sfWidgetFormDoctrineChoice(array(
    'model' => $this->getRelatedModelName('Island'), 
    'query' => $this->getObject()->getIsland()->getTable()->getIslandsQuery($regionId), 
    'add_empty' => '---', 
    'default' => $islandId, 
))); 

을 그리고 jQuery를 사용하여 AJAX 요청과 함께 사용할 수있는 옵션을 업데이트 :

+0

아약스를 통해로드하거나 자바 스크립트로 표시/숨기기를 원하십니까? – Dziamid

+0

선택 필드를 업데이트하는 것과 관련하여 나머지 코드를 보는 것이 좋습니다. – John

+0

Checkout [sfDependentSelectPlugin] (http://www.symfony-project.org/plugins/sfDependentSelectPlugin) – Dziamid

답변

1

sfDependentSelectPlugin와 장난 후에, 나는 HTML 요소를 선택 초기화하는 사용자 정의 쿼리를 할당 끝났다. 좋은 점은 AJAX 요청을 처리하는 액션이 ​​위와 동일한 쿼리 메소드를 사용하여 새로운 결과 집합을 반환한다는 점입니다.

관련 문제