我有两张桌子,个人资料和地区。 在区域表中我列出了所有国家名称。在个人资料表中,我有我的用户的个人资料以及“国家/地区”
中该表格中的一个字段以前我给用户一个输入框来输入国家名称,但最近我注意到很少有人在那里输入错误的信息。一个人进入'木星'作为他的国名。
现在我想做的是在我的个人资料模型中是这样的:
'country must exist' => array(
'rule' => 'countryValidation',
'message' => 'There is no such country'
)
public function countryValidation($check) {
$country = strtolower($this->data['Profile']['country']);
$countries = array();
$regions = $this-Region->find('all');
foreach($regions as $region){
array_push($countries, strtolower($region['Region']['country']));
}
return in_array($country,$countries);
}
我相信这里的问题是
$regions = $this-Region->find('all');
验证国家/地区的正确方法是什么?
顺便说一下,我不能给出一个国家下拉列表,因为它搞乱了我的布局/网站设计。答案 0 :(得分:0)
您要做的事情是个坏主意,因为您无法保证最终用户能正确拼写国家/地区的名称等等.......
无论如何,请在模型中创建自定义功能
public function myFunction($countryName){
return in_array($countryName,$countriesList);
}
其中$countriesList
是国家/地区名称数组。
在模型验证中,您可以执行以下操作
public $validate = array(
'country' => array(
'rule' => 'myFunction',
'message' => 'Insert custom message here'
)
);
编辑:
然后我将在Region模型中创建一个自定义查找函数,并从当前模型中调用它以检索结果数组以进行验证。类似的东西:
$countriesList = $this->Region->customFunction();
或$countriesList = $this->Region->find('list);
答案 1 :(得分:0)
选中此项以使用其他模型中的模型
App::uses('Model', 'Region');
$Region = new Region();
$regions = $Region->find('all');