我有两个表、配置文件和区域。 在区域表中,我有所有国家/地区名称的列表。在配置文件表中,我有我的用户的配置文件以及该表中“国家/地区”的字段之一
以前我给用户一个输入框来输入国家名称,但最近我注意到很少有人在那里输入错误的信息。一个人输入“jupiter”作为他的国家名称。
现在我想要在我的配置文件模型中做的是这样的:
'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');
验证国家/地区的正确方法是什么?
顺便说一句,我无法提供国家/地区的下拉列表,因为它扰乱了我的布局/网站设计。
您想要做的事情是一个坏主意,因为您无法保证最终用户会正确拼写国家/地区名称等......
无论如何,在你的模型中创建一个自定义函数
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);
勾选此项以在另一个模型中使用一个模型
App::uses('Model', 'Region');
$Region = new Region();
$regions = $Region->find('all');