如何在 Yii2 中验证二维数组
How to validate two dimensional array in Yii2
如何在 Yii2 中验证二维数组。
passenger[0][name] = bell
passenger[0][email] = myemail@test.com
passenger[1][name] = carson123
passenger[1][email] = carson##@test.com
如何验证此数组中的姓名和电子邮件
谢谢
验证二维数组的最简洁的解决方案可能是将其视为模型数组。因此,每个包含 email
和 name
数据集的数组都应该单独验证。
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();
如果您仅将模型用于验证,您也可以使用 DynamicModel
而不是创建 Passanger
模型。
或者您可以创建 your own validator 并将其用于数组的每个元素:
public function rules() {
return [
[['passengers'], 'each', 'rule' => [PassengerDataValidator::class]],
];
}
您可能还想阅读指南中的 Collecting tabular input 部分(不幸的是它仍然不完整)。
如何在 Yii2 中验证二维数组。
passenger[0][name] = bell
passenger[0][email] = myemail@test.com
passenger[1][name] = carson123
passenger[1][email] = carson##@test.com
如何验证此数组中的姓名和电子邮件
谢谢
验证二维数组的最简洁的解决方案可能是将其视为模型数组。因此,每个包含 email
和 name
数据集的数组都应该单独验证。
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();
如果您仅将模型用于验证,您也可以使用 DynamicModel
而不是创建 Passanger
模型。
或者您可以创建 your own validator 并将其用于数组的每个元素:
public function rules() {
return [
[['passengers'], 'each', 'rule' => [PassengerDataValidator::class]],
];
}
您可能还想阅读指南中的 Collecting tabular input 部分(不幸的是它仍然不完整)。