CakePHP - 仅在某些父模型中对链接模型进行自定义验证

时间:2013-04-26 21:08:11

标签: validation cakephp cakephp-2.0

我有一个通用的Image模型,该模型由需要附加图像的其他模型链接。在大多数地方,图像不是必需的,我们有后备,以防没有上传图像,但在一些特殊情况下,我需要强制上传图像以便表单验证,但我不知道如何验证通过另一个模型。例如,我的模型是这样的:

class Person extends AppModel
{
   public $belongsTo = array(
      'Image' => array(
         'className' => 'Image',
         'foreignKey' => 'image_id',
         'type' => 'LEFT',
      )
  );

  public $validate = array(
     ...
  );
}

Person模型包含一些人们必须输入的文本字段以及redirect_url字段。如果设置了重定向,页面逻辑将跳过尝试加载任何内容并将直接重定向到该URL。但是,如果设置,则需要一堆其他字段。我在Person模型中使用自定义验证方法可以正常工作,image_id模型未明确检查Person字段,因为它只是指向{{Image的指针1}}模型。

我可以以某种方式在此实例中向Image添加自定义/动态验证规则,以检查是否设置了Person.redirect_url吗?我唯一可以做的就是将它添加到我的beforeSave()并基本上使用$this->data手动检查它,但如果可能的话,我想以“正确”的方式执行此操作,挂钩到验证类。

我尝试使用类似的东西做了一些变化,到目前为止没有运气:

$this->Person->Image->validate['id']=array(...);

修改

这是我尝试过的,有哪些作品:

public function beforeValidate($options=array()) {
    parent::beforeValidate($options);

    if(empty($this->data['redirect_url'])) {
        if (!isset($this->data['Image']['filepath']) {
            $this->invalidate('Image.filepath', 'Custom error message.');
            return false;
        }
    }
}

这让我无需在其他地方添加额外的代码就可以使字段无效,但是当在前端打印出表单字段时,我最终得到一个通用的“此文件是必需的”错误而不是我的“自定义错误消息” 。我认为这可能是因为文件上传是由一个插件处理的,插件将它们驱散到S3而不是本地文件系统,并且它在链的某个地方被覆盖。

0 个答案:

没有答案