путь к файлу в методе setDestination Zend_Form_Element_File в Zend Framework - PullRequest
0 голосов
/ 29 декабря 2011

Я пытаюсь загрузить файл в Zend Framework.У меня есть следующий код в моей форме:

 $this->addElementPrefixPath('App', 'App/');
            $this->setName('upload');
    $this->setAttrib('enctype', 'multipart/form-data');

    $description = new Zend_Form_Element_Text('description');
    $description->setLabel('Description')
            ->setRequired(true)
            ->addValidator('NotEmpty');
    $file = new Zend_Form_Element_File('file');
    $path="/images";
    $file->setDestination($path)
            ->setLabel('File')
            ->setRequired(true)
            ->addValidator('NotEmpty');  

    $submit = new Zend_Form_Element_Submit('submit');

    $submit->setLabel('Upload');

    $this->addElements(array($description, $file, $submit));

Я использую NetBeans, и у меня есть одна папка с именем images в общей папке.Я хочу, чтобы все файлы загружались в папку с изображениями, но когда я запускаю проект, он выдает ошибку как

Указанный пункт назначения не является каталогом или не существует

Если я даю полный путькак C:\Users\398853\Documents\NetBeansProjects\ZendWithFileUpload\public\images, тогда он работает нормально, и файл загружается в папку изображений.Но когда я даю $path='/images' Это говорит выше ошибка 'Почему?Какой путь должен быть указан? Спасибо.

Ответы [ 3 ]

4 голосов
/ 30 декабря 2011

В SetDestination должен быть установлен абсолютный путь к папке с описаниями (/ var / www / ... или c: / webserver / ... в случае, когда вы win-user).

Но хорошей практикой является получение абсолютного пути с помощью функций getcwd () или realpath (dirname ( FILE )).

Итак, сначала вы должны определить константу (например, с именем PUBLIC_PATH) в файле index.php (обычно находится в публичной папке).

defined('PUBLIC_PATH')
|| define('PUBLIC_PATH', realpath(dirname(__FILE__)));

Таким образом, вы можете использовать переменную PUBLIC_PATH вместо записи строки "/ var / www / ..." в качестве префикса к реальному пути для загрузки папки.

Итак, если ваша папка «images» находится в папке «public», вы должны использовать такую ​​конструкцию:

$file->setDestination(PUBLIC_PATH . '/images');

Этот код также будет работать после загрузки проекта с локального хоста на веб-сервер.

1 голос
/ 28 февраля 2014

добавить конфигурацию в module.config.php

return array (
    ....
    //other settings
    'module_config' => array(
        'upload_location'   => __DIR__.'/../../../data/uploads'
    )   
);

добавить контроллер

public function getFileUploadLocation() {
    $config = $this->getServiceLocator()->get('config');
    return $config['module_config']['upload_location'];
}

и использовать ....

$uploadPath = $this->getFileUploadLocation();
$adapter->setDestination($uploadPath);

....

0 голосов
/ 29 декабря 2011

В вашем коде начальной загрузки вам нужно установить корневую папку вашего приложения.

Всякий раз, когда вы хотите получить путь к подпапке в папке вашего приложения (например, изображения в вашем сценарии), вам нужно использоватьэту переменную и добавьте имя вашей папки.

Если ваш код начальной загрузки находится в папке приложения, которая находится в общей корневой папке,

Zend_Registry::set('APP_ROOT', dirname(dirname(__FILE__)));

В других местах вашего приложения, когда вы хотитеполучить путь к папке, как вы хотите получить путь к папке с изображениями в общей папке, вам нужно использовать,

Zend_Registry::get('APP_ROOT') . "/images";
...