如何在cakephp中验证国家名称

时间:2014-10-27 10:22:18

标签: cakephp

我有两张桌子,个人资料和地区。 在区域表中我列出了所有国家名称。在个人资料表中,我有我的用户的个人资料以及“国家/地区”

中该表格中的一个字段

以前我给用户一个输入框来输入国家名称,但最近我注意到很少有人在那里输入错误的信息。一个人进入'木星'作为他的国名。

现在我想做的是在我的个人资料模型中是这样的:

'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');

验证国家/地区的正确方法是什么?

顺便说一下,我不能给出一个国家下拉列表,因为它搞乱了我的布局/网站设计。

2 个答案:

答案 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');