如何将变量传递给ZF2中的InputFilter :: add()方法

时间:2015-11-24 06:16:13

标签: php zend-framework2 zend-inputfilter

我不明白为什么我不能将任何变量传递给inputFilter-> add()。 在apache日志中,错误只是说:

[Mon Nov 23 23:35:35.690914 2015] [core:notice] [pid 1552] AH00052: child pid 3271 exit signal Segmentation fault (11)

在chrome的javascript控制台中,错误是:

status = (failed) net::ERR_INCOMPLETE_CHUNKED_ENCODING

我想这样做的原因是因为我每天都要将项目从开发迁移到生产很多次,并且打开这个文件并手动编辑一行代码是令人沮丧的。我确信这可以通过使用PHP的getcwd()函数实现自动化,但我忽略了如何完成这项任务。

这是我的代码

class MyClass implements InputFilterAwareInterface{
    public function getInputFilter(){
        if (!$this->inputFilter){
            $inputFilter = new InputFilter();
            $factory = new InputFactory();

            $inputFilter->add($factory->createInput(array(
                'name' => 'my-image', 
                'type' => 'Zend\InputFilter\FileInput',
                'required' => false,
                'allow_empty' => true,
                'priority' => 300,
                'filters' => array( 
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                    array(
                        'name' => 'Zend\Filter\File\RenameUpload',
                        'options' => array(
                            'target'    => getcwd() . "/media/img/imgUpload", // this line causes the error
                            'randomize' => true,
                            'use_upload_extension' => true,
                        )    
                    ),
                ), 
                'validators' => array(
                    array (
                        'name' => '\Zend\Validator\File\IsImage',
                    ),
                    array ( 
                        'name' => 'Zend\Validator\File\Size',
                        'options' => array(
                            'min' => '5kB', 
                            'max' => '10MB',
                        ), 
                    ),
                    array ( 
                        'name' => 'Zend\Validator\File\ImageSize',
                        'options' => array(
                            'minWidth' => 50,
                            'minHeight' => 50,
                            'maxWidth' => 2000,
                            'maxHeight' => 2000,
                        ), 
                    ),
                )))
            );
            $this->inputFilter = $inputFilter;
        }
        return $this->inputFilter;
    }
}

顺便说一句,如果我在“target”字段中在服务器中写入上传目录的完整路径,那么这段代码效果很好,但正如我上面提到的,我希望这个“目标”与服务器无关。 / p>

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

奇怪的错误。很难确切地知道它为什么会被引起,但您可以尝试使用以下magic constants来获得相同的结果:

PHP> = 5.3:

'target'    => __DIR__ . "/media/img/imgUpload",

或:

PHP< 5.3:

'target'    => dirname(__FILE__) . "/media/img/imgUpload",

getcwd()是一个非常古老的PHP4函数,其中魔术常量现在更新,更常用。

答案 1 :(得分:0)

经过几个小时的实验,我发现这是我的错误:我错过了在路径中包含'public'目录,因此解决我问题的最终工作代码是:

$this->rutaUploadImagenes = getcwd() . "/public/media/img/imgUpload"; // this line is located in the __construct()
'target' => $this->rutaUploadImagenes,