Cakephp,手动验证多个模型
Cakephp, validate multiple models manually
我有一个表单在提交时生成以下数组(见下文)。
我在我的控制器中使用这些数据来执行多项操作,之后我分别保存每一项。 (一次保存它们不是一种选择)。
我需要做的是找到一种方法来验证每个模型。
我已经试过了:
$this->Model->set($pertinentData);
$this->Model2->set($pertinentData);
if($this->Model->validates() && $this->Model2->validates()){
//Do whatever
}
这会产生不准确的结果,说它在我能看到时有效,反之亦然。
有人知道可行的选择吗?没有办法创建一个无表模型,我可以在其中为这些字段定义验证规则,例如:
Order.package_id
User.first_name
etc...
如有任何想法,我们将不胜感激。在表单生成的数组下方。
谢谢
Array
(
[Order] => Array
(
[id] => 15
[package_id] => 1743
[tariff_id] => 5470
[tarjeta] => 332
[numero_tarjeta] => 121204045050
[vencimiento_tarjeta] => 10/20
[cod_tarjeta] => 170
[titular_tarjeta] => JESUS CRISTO
[tarjeta_nacimiento] => 22/04/1988
[tarjeta_pais] => Argentina
[tarjeta_provincia] => Buenos Aires
[tarjeta_ciudad] => Ciudad
[tarjeta_cp] => 1428
[tarjeta_calle] => Calle
[tarjeta_numero] => 1477
[tarjeta_piso] => 2
)
[User] => Array
(
[id] =>
[email] => bla8@gmail.com
[phone] => 1568134449
[first_name] => Jesus
[last_name] => Something
[documento_tipo] => dni
[dni] => 335556666
[nacionalidad] => argentino
[birthdate] => 22/04/2019
)
[OrdersCompanion] => Array
(
[1] => Array
(
[first_name] => Chango
[last_name] => Mas
[documento_tipo] => dni
[dni] => 445556666
[nacionalidad] => argentino
[birthdate] => 30/02/2010
)
[1] => Array
(
[first_name] => Chango
[last_name] => Mas
[documento_tipo] => dni
[dni] => 445556666
[nacionalidad] => argentino
[birthdate] => 30/02/2010
)
)
)
您可以通过在模型中定义 $useTable= false
来使用 tableless 模型。像这样
public $useTable = false;
定义您所有的自定义验证,当然还有您的架构(因为您的模型没有 table,您必须手动定义模型架构)。那么在你的controller中,首先要指明它没有model,然后声明$model
这个变量。这是为了避免 cakePHP 的自动模型控制器绑定,你的控制器看起来像这样
public $useModel = false;
$model = ClassRegistry::init('ContactOperation');
现在您的模型已根据需要与您的控制器相关联,并且您可以轻松进行之前定义的自定义验证。
$model->set($this->request->data);
if($model->validates()) {
$this->Session->setFlash(_('Thank you!'));
// do email sending and possibly redirect
// elsewhere for now, scrub the form
// redirect to root '/'.
unset($this->request->data);
$this->redirect('/');
} else {
$this->Session->setFlash(_('Errors occurred.'));
// display the form with errors.
}
您可以从 here
中找到更多详细信息
我有一个表单在提交时生成以下数组(见下文)。 我在我的控制器中使用这些数据来执行多项操作,之后我分别保存每一项。 (一次保存它们不是一种选择)。 我需要做的是找到一种方法来验证每个模型。 我已经试过了:
$this->Model->set($pertinentData);
$this->Model2->set($pertinentData);
if($this->Model->validates() && $this->Model2->validates()){
//Do whatever
}
这会产生不准确的结果,说它在我能看到时有效,反之亦然。
有人知道可行的选择吗?没有办法创建一个无表模型,我可以在其中为这些字段定义验证规则,例如:
Order.package_id
User.first_name
etc...
如有任何想法,我们将不胜感激。在表单生成的数组下方。 谢谢
Array
(
[Order] => Array
(
[id] => 15
[package_id] => 1743
[tariff_id] => 5470
[tarjeta] => 332
[numero_tarjeta] => 121204045050
[vencimiento_tarjeta] => 10/20
[cod_tarjeta] => 170
[titular_tarjeta] => JESUS CRISTO
[tarjeta_nacimiento] => 22/04/1988
[tarjeta_pais] => Argentina
[tarjeta_provincia] => Buenos Aires
[tarjeta_ciudad] => Ciudad
[tarjeta_cp] => 1428
[tarjeta_calle] => Calle
[tarjeta_numero] => 1477
[tarjeta_piso] => 2
)
[User] => Array
(
[id] =>
[email] => bla8@gmail.com
[phone] => 1568134449
[first_name] => Jesus
[last_name] => Something
[documento_tipo] => dni
[dni] => 335556666
[nacionalidad] => argentino
[birthdate] => 22/04/2019
)
[OrdersCompanion] => Array
(
[1] => Array
(
[first_name] => Chango
[last_name] => Mas
[documento_tipo] => dni
[dni] => 445556666
[nacionalidad] => argentino
[birthdate] => 30/02/2010
)
[1] => Array
(
[first_name] => Chango
[last_name] => Mas
[documento_tipo] => dni
[dni] => 445556666
[nacionalidad] => argentino
[birthdate] => 30/02/2010
)
)
)
您可以通过在模型中定义 $useTable= false
来使用 tableless 模型。像这样
public $useTable = false;
定义您所有的自定义验证,当然还有您的架构(因为您的模型没有 table,您必须手动定义模型架构)。那么在你的controller中,首先要指明它没有model,然后声明$model
这个变量。这是为了避免 cakePHP 的自动模型控制器绑定,你的控制器看起来像这样
public $useModel = false;
$model = ClassRegistry::init('ContactOperation');
现在您的模型已根据需要与您的控制器相关联,并且您可以轻松进行之前定义的自定义验证。
$model->set($this->request->data);
if($model->validates()) {
$this->Session->setFlash(_('Thank you!'));
// do email sending and possibly redirect
// elsewhere for now, scrub the form
// redirect to root '/'.
unset($this->request->data);
$this->redirect('/');
} else {
$this->Session->setFlash(_('Errors occurred.'));
// display the form with errors.
}
您可以从 here
中找到更多详细信息