如何在cakephp中验证国家/地区名称

问题描述 投票:0回答:2

我有两个表、配置文件和区域。 在区域表中,我有所有国家/地区名称的列表。在配置文件表中,我有我的用户的配置文件以及该表中“国家/地区”的字段之一

以前我给用户一个输入框来输入国家名称,但最近我注意到很少有人在那里输入错误的信息。一个人输入“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');

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

顺便说一句,我无法提供国家/地区的下拉列表,因为它扰乱了我的布局/网站设计。

php cakephp
2个回答
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);


0
投票

勾选此项以在另一个模型中使用一个模型

    App::uses('Model', 'Region');
    $Region = new Region();
    $regions = $Region->find('all');
© www.soinside.com 2019 - 2024. All rights reserved.