【问题标题】:Zend Framework - Validating contents of upload (secondary validation)Zend Framework - 验证上传内容(二次验证)
【发布时间】:2012-05-15 14:54:50
【问题描述】:

我目前正在让用户上传一个 MS Word 文档,我在其中检查 XML 中的版本。控制器当前检查 isValid() 然后点击一个进行解析和提取的库(因为 word 是一个存档)。现在由于它在技术上已经“有效”,我需要通过库再次检查有效性。 Zend Framework 中最好的做法是什么?

来自 Kohana Land 的欢呼声 ;)

【问题讨论】:

  • 嗯,我做到了。虽然我有使用 addValidator(new My_Check); 扩展 zend_form 的表单;但是,文档的提取发生在库中,并且发生在 isValid 之后。在这种情况下,它必须发生两次,这不是我想要做的。
  • 我正在检查文件中的实际数据以进行验证。它需要作为二次验证发生。首先,所有基本项目都是正确的(它是一个文件,小于 N 字节等)然后,去..ok 现在这是有效的..我需要进行二次验证
  • 您可以发布当前代码吗?我认为您需要做的就是将您的自定义验证器与其他验证器一起添加到验证链中(它是一个文件,小于 n 字节),但将每个这些的 breakChainOnFailure 标志设置为 true,以便您的特殊 MSWord 验证器只被调用如果满足其他条件。这样特殊的验证就内置到了表单中,验证完表单就不需要再调用了。
  • 这个框架让我很沮丧。来自像 Kohana 这样的框架,这件事看起来就像一个 OOP 混乱。只想在isValid之后触发一个错误,发回给form。就这样。它需要在初始 isValid 之后发生,如果失败,则填充表单并返回。

标签: php zend-framework


【解决方案1】:

我想我明白你在寻找什么。
您当前调用的表单对表单有效,您的文件通过表单验证(正确的大小、扩展名...)现在您需要解压缩文件并验证内容。

我假设您已经拥有验证内容的代码,并且只是想了解如何在控制器中使用它。
'

public function anyAction() {

$form = new Form();
//test for $_POST
if ($this->getRequest()->isPost(){
    //Test form for validity
    if ($form->isValid($this->getRequest()->getPost()){
        //will receive file upload (unless disabled in element) and filter form values,
        //based on filters attached to the elements.
        $data = $form->getValues();
        //placeholder for whatever code is required to validate contents of file
        $validateFile = new MyFileValidator();
        //test for valid file contents
        if ($validateFile->isValid($data['file']){
            //Do some Stuff 
        }
        //if file contents is not valid, display form and populate values with unfiltered values
        $form->populate($this->getRequest()->getPost());
    }
   //if form is not valid, it should stay populated and display element errors
  }
//if not post send form to view
$this->view->form = $form;
}

此示例应为此类问题提供基本的控制器工作流程。我希望它能解决你的问题。

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多