如何在Yii2中验证二维数组

如何在Yii2中验证二维数组,yii,yii2,yii2-advanced-app,Yii,Yii2,Yii2 Advanced App,如何在Yii2中验证二维数组 passenger[0][name] = bell passenger[0][email] = myemail@test.com passenger[1][name] = carson123 passenger[1][email] = carson##@test.com 如何验证此阵列中的名称和电子邮件 感谢验证二维阵列最干净的解决方案可能是将其视为模型阵列。因此,每个包含电子邮件和名称数据集的数组都应该分别进行验证 class Passenger ext

如何在Yii2中验证二维数组

 passenger[0][name] = bell
 passenger[0][email] = myemail@test.com
 passenger[1][name] = carson123
 passenger[1][email] = carson##@test.com
如何验证此阵列中的名称和电子邮件


感谢

验证二维阵列最干净的解决方案可能是将其视为模型阵列。因此,每个包含
电子邮件
名称
数据集的数组都应该分别进行验证

class Passenger extends ActiveRecord {

    public function rules() {
        return [
            [['email', 'name'], 'required'],
            [['email'], 'email'],
        ];
    }
}

class PassengersForm extends Model {

    /**
     * @var Passenger[]
     */
    private $passengersModels = [];

    public function loadPassengersData($passengersData) {
        $this->passengersModels = [];
        foreach ($passengersData as $passengerData) {
            $model = new Passenger();
            $model->setAttributes($passengerData);
            $this->passengersModels[] = $model;
        }

        return !empty($this->passengers);
    }

    public function validatePassengers() {
        foreach ($this->passengersModels as $passenger) {
            if (!$passenger->validate()) {
                $this->addErrors($passenger->getErrors());
                return false;
            }
        }

        return true;
    }
}
在控制器中:

$model = new PassengersForm();
$model->loadPassengersData(\Yii::$app->request->post('passenger', []));
$isValid = $model->validatePassengers();
如果仅用于验证,您也可以使用而不是创建
Passanger
模型


或者,您可以只为数组的每个元素创建并使用它:

public function rules() {
    return [
        [['passengers'], 'each', 'rule' => [PassengerDataValidator::class]],
    ];
}

您可能还想阅读指南中的部分(遗憾的是它仍然不完整)。

到目前为止您尝试了什么?@Yupik您能帮我吗