我不确定我是否正确理解了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
时,我会进入查询WHERE 'Profile'.'locale' = '0'
而不是WHERE 'Profile'.'locale' IS NULL
。
我正在使用CakeDC搜索当前的开发人员分支和CakePHP 2.4.6。