ユーザーが住所を編集するときに国の選択入力を再入力することに固執しています。
コントローラーで:
public function loadCountryList() {
$this->loadModel('GeoCountry');
$geoCountryList = $this->GeoCountry->find('all', array(
'recursive' => -1,
'order' => array('GeoCountry.name' => 'ASC')
));
$geoCountries = array('Select Country' => array('US' => 'United States', 'CA' => 'Canada'));
while(list($key,$row) = each($geoCountryList)) {
$geoCountries['International Countries'][$row['GeoCountry']['id']] = $row['GeoCountry']['name'];
}
$this->set('geoCountries', $geoCountries);
}
チェックアウト/住所の編集画面で選択すると、optgroups を使用してコントローラーで構造化された選択が正しくレンダリングされ、値が期待どおりに正しくポストされ、セッションに保存されます。
<?php echo $this->Form->input('geoCountries', array('class' => 'span3', 'label' => 'Billing Country', 'name' => 'data[Order][billing_country]', 'id' => 'OrderBillingCountry')); ?>
そして出力:
<select name="data[Order][billing_country]" class="span3" id="OrderBillingCountry">
<optgroup label="Select Country">
<option value="US">United States</option>
<option value="CA">Canada</option>
</optgroup>
<optgroup label="International Countries">
<option value="AF">Afghanistan</option>
….
</optgroup>
</select>
DebugKit を使用して、セッションに保存されている 2 文字の国 ISO コードを確認できます: billing_country CA
.. shipping_country についても同じ ...
しかし、ページに戻ると、値は「米国」に戻ります(選択の最初の値...
それで、私は何が欠けていますか??! 私はこれで髪を引き裂いています!