我不确定我是否正确理解了 emptyValue。我希望能够通过设置的语言过滤用户,但有些用户还没有设置语言,所以他们有 NULL。这是代码:
// Model
public $filterArgs = array(
'locale' => array('type' => 'value', 'field' => 'Profile.locale', 'allowEmpty' => true),
);
// Controller
public $presetVars = array(
'locale' => array('type' => 'value', 'allowEmpty' => true, 'emptyValue' => '0')
);
在 DB 中,字段 Profile.locale 可以为 NULL,其默认值为 NULL。现在的观点:
<?php echo $this->Form->select('locale', am(array('0' => __('Not set')), Configure::read('User.locales'))); ?>
这给了我正确的 HTML:
<select name="data[User][locale]" class="input-small" id="UserLocale">
<option value=""></option>
<option value="0">Not set</option>
<option value="eng">English</option>
<option value="deu">Deutsch</option>
<option value="pol">Polski</option>
</select>
但是当我尝试搜索并选择“未设置”时,区域设置参数不会显示在 URL 中。此外,当我手动?locale=0
输入 URL 时,我会查询WHERE 'Profile'.'locale' = '0'
not WHERE 'Profile'.'locale' IS NULL
。
我正在使用 CakeDC 搜索当前开发人员分支和 CakePHP 2.4.6。