2011-04-12 21 views
0

我正在Symfony應用程序中開發一個表單,其中用戶必須使用HTML select元素指示國家,地區和可選島。加載Symfony sfWidgetFormDoctrineChoice選擇一組有限的結果

我有三種模式:國家,地區和島嶼;和Symfony的具有使用sfWidgetFormDoctrineChoice小部件的形式自動生成三種構件:

... 
'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根據國家中選擇的值。

使用jQuery的change方法和簡單的AJAX請求,在HTML文檔準備就緒後執行此操作很容易。但是我想知道是否有一種方法可以直接從Symfony中完成,也許在表單配置中有一個默認的組合選擇。

有什麼建議嗎?

謝謝!

+0

那麼,是否希望通過ajax加載或通過javascript顯示/隱藏? – Dziamid 2011-04-12 20:11:36

+0

很高興看到與更新選擇字段相關的其他代碼。 – John 2012-01-17 21:59:15

+0

結帳[sfDependentSelectPlugin](http://www.symfony-project.org/plugins/sfDependentSelectPlugin) – Dziamid 2011-04-12 20:53:47

回答

1

sfDependentSelectPlugin玩弄後,我結束了指定自定義查詢初始化HTML選擇元素:

$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請求的選項。好處是,處理AJAX請求的動作使用上述相同的查詢方法返回一組新的結果。