我正在构建一个购物车,当用户编辑地址时,我坚持重新填充国家/地区选择输入。
在控制器中:
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);
}
结帐/编辑地址屏幕上的选择正确呈现带有控制器中结构的 optgroup 的选择,并且值正确发布并按预期保存在会话中。
<?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,我可以看到保存在 Session 中的两个字母国家 ISO 代码:billing_country CA
.. 与 shipping_country 相同 ...
但是当我返回页面时,该值返回“美国”(选择中的第一个值...
那我错过了什么??!我一直在扯这个头发!