Zend framework 重命名无法';不能使用InputFilter导入

Zend framework 重命名无法';不能使用InputFilter导入,zend-framework,zend-form,zend-framework3,zend-inputfilter,Zend Framework,Zend Form,Zend Framework3,Zend Inputfilter,我不太清楚如何恰当地问这个问题。 我一次导入几个文件。文件名包括文件所属的匹配系统。到目前为止效果还不错。 但是会有不匹配的文件,因为找不到系统。我需要标记它们,以便用户可以检查 我的想法是将这些文件也导入到Web服务器,但要导入到不同的目录中。之后可以向用户显示该目录 MyInputFilter将导入到匹配文件的正确位置 $inputFilter->add([ 'type' => 'Zend\InputFilter\FileInput',

我不太清楚如何恰当地问这个问题。 我一次导入几个文件。文件名包括文件所属的匹配系统。到目前为止效果还不错。 但是会有不匹配的文件,因为找不到系统。我需要标记它们,以便用户可以检查

我的想法是将这些文件也导入到Web服务器,但要导入到不同的目录中。之后可以向用户显示该目录

My
InputFilter
将导入到匹配文件的正确位置

$inputFilter->add([
            'type'     => 'Zend\InputFilter\FileInput',
            'name'     => 'PAD_Document_Path',  // Element's name.
            'required' => true,    // Whether the field is required.
            'filters'  => [        // Filters.
                    [
                            'name' => \Zend\Filter\File\RenameUpload::class,
                            'options' => [
                                    'use_upload_name'=>true,
                                    'use_upload_extension' => true,
                                    'randomize' => false,
                                    'overwrite' => true,
                                    'target' => './public/files/pads',
                            ],
                    ],
            ],
            'validators' => [      // Validators.
                    [
                            'name' => \Zend\Validator\File\Extension::class,
                            'options' => [
                                    'extension' => 'pdf',
                                    'message' => 'File extension not match',
                            ],
                    ],
                    [
                            'name' => \Zend\Validator\File\MimeType::class,
                            'options' => [
                                    'mimeType' => 'application/pdf',    //'text/xls', 'text/xlsx',
                                    'message' => 'File type not match',
                            ],
                    ],
                    [
                            'name' => \Zend\Validator\File\Size::class,
                            'options' => [
                                    'min' => '1kB',  // minimum of 1kB
                                    'max' => '8MB',
                                    'message' => 'File too large',
                            ],
                    ],
            ]
    ]);
因此,我可以使用
InputFilter
也导入不匹配的文件吗?如果不可能,哪种方式最好

另一个想法是根本不导入不匹配的文件,但是我需要在客户端系统中重命名它们。那可能是不可能的,不是吗


我希望我能正确地解释它,这样每个人都能理解。

由于以下问题的讨论,我们找到了一个可能的解决方案

(请试一试,否则在解答时添加您自己的答案)


如果我们在导入之前后退一步。然后是验证点,如果要在此时重命名,您将如何执行此操作

显示如何重命名文件的选项,还可以为文件设置目标位置。但是,这是所有文件的规则

您应该创建这样的规则,以统一验证文件。如果需要根据条件(例如文件名)将文件发送到特定位置,则应在表单验证后创建此逻辑。例如,在控制器类中。在该控制器中,您处理与“快乐流”中的需求相匹配的文件,并将不匹配的文件保留在临时文件夹中

如果有任何文件不匹配,则将用户重定向到一个位置,用户必须在该位置决定文件的目的地和/或处理方式。如果没有任何文件,您可以正常运行应用程序

流程示例:

  • 上传文件A到文件F
  • A&B很好,它们与X&Y系统匹配,并为其移动
  • 上述2之后不匹配的文件(C到F)的备用流

  • 余数不能匹配
  • 用户将被重定向到页面,在该页面中,他必须选择每个文件,该文件是用于X还是用于Y
  • 将文件作为更正移动到选定选项

  • 我认为这是对InputFilter的错误使用,InputFilter用于验证上传的文件是否正确,而不是如何处理它。在我看来,您必须在控制器或文件处理服务中处理此问题。然后,您可以询问处理此操作的任何逻辑,以查看是否有任何逻辑符合需要进一步操作的标准,如果符合,则执行此操作,否则继续执行下一步。但建议InputFilter在成功的情况下提供filecopy的目标。(Zend教程)。你们对我有什么想法吗,如何处理不匹配的文件?这是真的,因为下载(客户端上传,服务器下载)需要一个(tmp)目的地。然而,将它们全部放在一个tmp位置(
    target
    选项),然后用一些逻辑确定哪些匹配,哪些不匹配,这不是更简单吗?在筛选器和/或验证器选项中执行此操作是将它们用于它们不是为之设计的目的。可以理解,但如果我们在导入之前后退一步。这就是验证点,如果你想在这一点上重命名,你会怎么做?是的,有,但这为所有文件设置了规则。因此,我将创建一个规则,然后在表单验证之后,处理收到的内容。大概在控制器中,我会区分文件匹配条件(如您在问题的第一段中所述)和不匹配条件。我会在“快乐流”中处理的第一个问题,这是我最初期望的。后者将保留在tmp(上传)目录(1/2)中