Cakephp,手动验证多个模型

Cakephp,手动验证多个模型,php,validation,cakephp,models,Php,Validation,Cakephp,Models,我有一个表单,在提交时生成以下数组(见下文)。 我在控制器中使用这些数据执行几个操作,然后分别保存每个操作。(一次保存它们不是一个选项)。 我需要做的是找到一种方法来验证每个模型。 我已经试过了: $this->Model->set($pertinentData); $this->Model2->set($pertinentData); if($this->Model->validates() && $this->Model2->v

我有一个表单,在提交时生成以下数组(见下文)。 我在控制器中使用这些数据执行几个操作,然后分别保存每个操作。(一次保存它们不是一个选项)。 我需要做的是找到一种方法来验证每个模型。 我已经试过了:

$this->Model->set($pertinentData);
$this->Model2->set($pertinentData);
if($this->Model->validates() && $this->Model2->validates()){
    //Do whatever
}
这会产生不确定的结果,当我看到它不存在时,它会验证,反之亦然

有人知道可行的选择吗?是否有一种方法可以创建一个无表模型,在其中我可以为以下字段定义验证规则:

Order.package_id
User.first_name
etc...
任何想法都值得赞赏。在窗体生成的数组下面。 谢谢


通过在模型中定义
$useTable=false
,可以使用无表模型。像这样

public $useTable = false;
定义所有自定义验证,当然还有模式(因为模型没有表,所以必须手动定义模型模式)。然后在控制器中,必须首先指出它没有模型,然后声明
$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.
    }

您可以从

中找到更多详细信息,谢谢您的回复。这是我最初的想法。但是,如果您查看我发布的数组…如何定义Order.first\u name&&OrdersCompanion.first\u name的验证规则?您必须使用自定义验证规则。您可以使用自定义函数进行验证。如果您需要其他模型的任何数据,您可以导入模型,或定义无表模型与其他模型之间的关系,然后在自定义函数中使用
$this
var引用您的模型或
$this->model
引用其他模型。检查
$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.
    }