php 无法验证Yii2模型中的数据

8mmmxcuj  于 2023-01-12  发布在  PHP
关注(0)|答案(1)|浏览(159)

我无法验证模型中的值。我是新手,任何人都可以建议我做错了什么。我正在使用REST API与Excel文件上传和验证单行的时间
这是我的数据和模型中的负载数据

$data = array(
    'firstName' => 'asdjqkw',
    'lastName' => '',
    'email' => 'ansm@',
    'companyName' => 'ddq',
    'address_1' => '',
    'address_2' => 'aas',
    'country' => '',
    'state' => 'New Brunswick',
    'city' => '87875',
    'zip' => '484527',
);
$model->load($data);
if (!$model->validate()) {
    $validation = $model->errors;
}

这是我定义的模型规则和属性标签required、email和maxlength验证,但仍有一些值可用,它仍在发送该字段的required验证错误

public function rules() {
    return [
        [['firstName', 'lastName', 'email', 'companyName', 'address_1', 'country', 'state', 'city', 'zip'], 'required'],
        ['email', 'email'],
        [['firstName', 'lastName', 'email', 'companyName', 'address_1', 'country', 'state', 'city', 'zip'], 'string', 'max' => 250],
    ];
}

public function attributeLabels() {
    return [
        'firstName' => 'First Name',
        'lastName' => 'Last Name',
        'email' => 'Email',
        'companyName' => 'Company Name',
        'address_1' => 'Address 1',
        'country' => 'Country',
        'state' => 'State',
        'city' => 'City',
        'zip' => 'Zip',
    ];
}

加载此数据后,我收到验证错误

"firstName": [
  "First Name cannot be blank."
],
"lastName": [
  "Last Name cannot be blank."
],
"email": [
  "Email cannot be blank."
],
"companyName": [
  "Company Name cannot be blank."
],
"address_1": [
  "Address 1 cannot be blank."
],
"country": [
  "Country cannot be blank."
],
"state": [
  "State cannot be blank."
],
"city": [
  "City cannot be blank."
],
"zip": [
  "Zip cannot be blank."
]
xdyibdwo

xdyibdwo1#

这里发生的事情是你在调用你的模型的load方法,它有两个参数,第一个是你的data,第二个是formName,当没有声明formName参数时,Yii 2会把它设置为等于你的模型,所以在这种情况下,它会尝试像这样加载数据:$data ['modelName'].所以你可以修改你的数据数组,使其符合下面的格式:

$data = array(
  'yourModel' => [
    'yourData => 'yourValue'  
  ]
)

但是有一种更简单的方法,不需要我们不断地记住如何构造数据数组:将“load”方法的“formName”参数设置为空字符串,如下所示:

$model->load($data, '');

这样做的原因是它允许以下代码在'load'方法内部运行(其中$scope是formData参数):

if ($scope === '' && !empty($data)) {
  $this->setAttributes($data);
  return true;
}

这样我们就可以继续在更少的维度上编写数组,这是一种小而好的方法,可以让数组稍微整洁一些:)。

相关问题