Загрузка Zend-изображения в неправильном месте назначения - PullRequest
0 голосов
/ 19 марта 2012

, пожалуйста, помогите .. Я новичок и пытаюсь изучить Zend Framework, но у меня проблема при загрузке изображения.Сценарий в файле Application.ini

uploads.uploadPath = APPLICATION_PATH "/../public/uploads"

Форма для загрузки Изображение:

$this->setAction('/data/personil/create')
        ->setMethod('post');

    //Item input untuk gambar
    $images = new Zend_Form_Element_File('images');
    $images->setMultiFile(3)
    ->addValidator('IsImage')
    ->addValidator('Size', false, '204800')
    ->addValidator('Extension', false, 'jpg,png,gif')
    ->addValidator('ImageSize', false, array(
            'minwidth'  => 150,
            'minheight' => 150,
            'maxwidth'  => 700,
            'maxheight' => 700
    ))
    ->setValueDisabled(true);           
    // attach element to form
    $this->addElement($images); 

    // create display group for file elements
    $this->addDisplayGroup(array('images'), 'files');
    $this->getDisplayGroup('files')
    ->setOrder(40)
    ->setLegend('Images');

Создание действия контроллера:

public function createAction()
{
    $form = new Pengadilan_Form_PersonilCreate();
    $this->view->form = $form;
    $flashMessenger = $this->_helper->FlashMessenger;

    //SImpan kedatabase
    if($this->getRequest()->isPost()){
        if($form->isValid($this->getRequest()->getPost())){
            $personil = new Pengadilan_Model_Personil();
            $personil->fromArray($form->getValues());
            $personil->RecordDate = date('Y-m-d', mktime());
            $personil->DisplayStatus = 0;
            $personil->DisplayUntil = null;
            $personil->save();
            $id = $personil->RecordId;

            $config = $this->getInvokeArg('bootstrap')->getOption('uploads');
            $form->images->setDestination($config['uploadPath']);
            $adapter = $form->images->getTransferAdapter();
            for($x=0; $x<$form->images->getMultiFile(); $x++) {
                $xt = @pathinfo($adapter->getFileName('images_'.$x.'_'), PATHINFO_EXTENSION);
                $adapter->clearFilters();
                $adapter->addFilter('Rename', array(
                        'target' => sprintf('%d_%d.%s', $id, ($x+1), $xt),
                        'overwrite' => true
                ));
                $adapter->receive('images_'.$x.'_');

            }


             $this->_helper->getHelper('FlashMessenger')->addMessage('Data sekses diinput ke database #' . $id . '. Admin akan segera merivew, jika diterima, akan ditampilkan dalam waktu 48 jam, Terima kasih.');
    $this->_redirect('/data/personil/sukses');
        }
    }

}

Отображение действия контроллера:

public function displayAction()
{
    //Pertama setting filters
    $filters  = array(
            'id' => array('HtmlEntities', 'StripTags', 'StringTrim')
            );
    $validators = array(
            'id' => array('NotEmpty', 'Int')
            );
    $input = new Zend_Filter_Input($filters, $validators);
    $input->setData($this->getRequest()->getParams());      
    if($input->isValid()){
        $q = Doctrine_Query::create()
            ->from('Pengadilan_Model_Personil p')
            ->leftJoin('p.Pengadilan_Model_Jabatan j')
            ->leftJoin('p.Pengadilan_Model_Tupoksi t')
            ->leftJoin('p.Pengadilan_Model_Golongan g')             
            ->leftJoin('p.Pengadilan_Model_Agama a')
            ->leftJoin('p.Pengadilan_Model_Kelamin k')
            ->where('p.RecordId = ?', $input->id)
            ->addWhere('p.DisplayStatus = 1')
            ->addWhere('p.DisplayUntil >= CURDATE()');


        $result = $q->fetchArray();
        if(count($result) == 1){
            $this->view->personil = $result[0];
            $this->view->images = array();
            $config = $this->getInvokeArg('bootstrap')->getOption('uploads');
            foreach (glob("{$config['uploadPath']}/{$this->view->item['RecordID']}_*") as $file) {
                $this->view->images[] = basename($file);

    }
        }else{
            throw new Zend_Exception('Maaf, halaman tidak ditemukan, 404');
        }
    }else{
        throw new Zend_Exception('Kesalahan Input');
    }

}

Последний скрипт для просмотра: display.phtml

  <div id="images">
<?php foreach ($this->images as $image): ?>
<img src="/uploads/<?php echo $this->escape($image); ?>" width="150" height="150" />    
<?php endforeach; ?>

Загрузка изображения Назначение в конфигурации - / public / загрузка в моем случае изображения в / public

Изображение успешно загружено и переименовано, но за пределами каталога, и изображение не отображается на display.phtml

Большое спасибо за вашу помощь ..

1 Ответ

0 голосов
/ 20 марта 2012

Сначала необходимо установить кодировку формы Ссылка на элемент файла $form->setAttrib('enctype', 'multipart/form-data');

Также вам, вероятно, следует завершить настройку элемента image до того, как вы разместите форму, а не после.Так что переместите setDestination вещи туда, где вы инициализируете форму, у вас может быть больше шансов на то, что она будет работать.

public function createAction()
{
    $form = new Pengadilan_Form_PersonilCreate();

    //set form encoding
    $form->setAttrib('enctype', 'multipart/form-data');

    //get path and set destination for image element
    $config = $this->getInvokeArg('bootstrap')->getOption('uploads');
    $form->images->setDestination($config['uploadPath']);

    $this->view->form = $form;
    //consider intializing flash messenger in the init() method
    $flashMessenger = $this->_helper->FlashMessenger;

    //SImpan kedatabase
    if($this->getRequest()->isPost()){
        if($form->isValid($this->getRequest()->getPost())){
            //more code...

            $adapter = $form->images->getTransferAdapter();
            for($x=0; $x<$form->images->getMultiFile(); $x++) {
                $xt = @pathinfo($adapter->getFileName('images_'.$x.'_'), PATHINFO_EXTENSION);
                $adapter->clearFilters();
                $adapter->addFilter('Rename', array(
                        'target' => sprintf('%d_%d.%s', $id, ($x+1), $xt),
                        'overwrite' => true
                ));
                $adapter->receive('images_'.$x.'_');

            }

             $this->_helper->getHelper('FlashMessenger')->addMessage('Data sekses diinput ke database #' . $id . '. Admin akan segera merivew, jika diterima, akan ditampilkan dalam waktu 48 jam, Terima kasih.');
             $this->_redirect('/data/personil/sukses');
        }
    }

}

не уверен, что это все исправит, но это должно быть началом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...