Платформа зенда: загрузка изображения

Я голосую за IB (Интерактивные Брокеры). Я использовал их в прошлом, как было довольно счастливо. Рынки капитала вершины, торгующие также, имеют API (pcmtrading.com), но я не использовал их.

Интерактивные Брокеры:

https://www.interactivebrokers.com/en/? f = % 2Fen%2Fsoftware%2Fibapi.php

Рынки капитала Вершины:

http://www.pcmtrading.com/es/technology/api.html

12
задан Jan Hančič 8 December 2009 в 16:36
поделиться

3 ответа

Сначала поместите это в начало вашего скрипта:

error_reporting (E_ALL); // это должно показать все ошибки php

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

else
{
   $f->populate($data);
}

Чтобы отобразить загруженное изображение в форме, просто добавьте div в свой шаблон представления, например:

<div style="float:right"><?=$this->image?></div>

Если изображение загружено нормально, заполните $ view-> image символом img tag.

Что касается автоматического переименования, нет, оно не встроено, но это очень просто. Я покажу вам, как это сделать, ниже. Вот как я обрабатываю загрузку изображений:

$form = new Zend_Form();
$form->setEnctype(Zend_Form::ENCTYPE_MULTIPART);

$image = new Zend_Form_Element_File('image');
$image->setLabel('Upload an image:')
      ->setDestination($config->paths->upload)
      ->setRequired(true)
      ->setMaxFileSize(10240000) // limits the filesize on the client side
      ->setDescription('Click Browse and click on the image file you would like to upload');
$image->addValidator('Count', false, 1);                // ensure only 1 file
$image->addValidator('Size', false, 10240000);            // limit to 10 meg
$image->addValidator('Extension', false, 'jpg,jpeg,png,gif');// only JPEG, PNG, and GIFs

$form->addElement($image);

$this->view->form = $form;

if($this->getRequest()->isPost())
{
    if(!$form->isValid($this->getRequest()->getParams()))
    {
        return $this->render('add');
    }

    if(!$form->image->receive())
    {
        $this->view->message = '<div class="popup-warning">Errors Receiving File.</div>';
        return $this->render('add');
    }

    if($form->image->isUploaded())
    {
        $values = $form->getValues();
        $source = $form->image->getFileName();

        //to re-name the image, all you need to do is save it with a new name, instead of the name they uploaded it with. Normally, I use the primary key of the database row where I'm storing the name of the image. For example, if it's an image of Person 1, I call it 1.jpg. The important thing is that you make sure the image name will be unique in whatever directory you save it to.

        $new_image_name = 'someNameYouInvent';

        //save image to database and filesystem here
        $image_saved = move_uploaded_file($source, '/www/yoursite/images/'.$new_image_name);
        if($image_saved)
        {
            $this->view->image = '<img src="/images/'.$new_image_name.'" />';
            $form->reset();//only do this if it saved ok and you want to re-display the fresh empty form
        }
    }
}
19
ответ дан 2 December 2019 в 07:21
поделиться

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

0
ответ дан 2 December 2019 в 07:21
поделиться

Во-первых, ознакомьтесь с руководством Быстрый старт . Обратите внимание на то, что в нем есть ErrorController.php, который будет отображать вам сообщения об ошибках. Также обратите внимание на то, как в application.ini есть эти строки, которые заставляют PHP выдавать сообщения об ошибках, но убедитесь, что вы находитесь в среде «разработки», чтобы увидеть их (что установлено в public / .htaccess).

phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

Во-вторых, ZF имеет фильтр переименования для загрузки файлов:

$upload_elt = new Zend_Form_Element_File('upload');
$upload_elt
->setRequired(true)
->setLabel('Select the file to upload:')
->setDestination($uploadDir)
->addValidator('Count', false, 1) // ensure only 1 file
->addValidator('Size', false, 2097152) // limit to 2MB
->addValidator('Extension', false, 'doc,txt')
->addValidator('MimeType', false, 
               array('application/msword',
                 'text/plain'))
->addFilter('Rename', implode('_', 
                  array($this->_user_id,
                    $this->_upload_category,
                    date('YmdHis'))))
->addValidator('NotExists', false, $uploadDir)
;

Некоторые из приведенных выше интересных вещей:

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

форма. В контроллере / действии, принимающем загрузку, вы можете сделать следующее:

$original_filename = $form->upload->getFileName(null, false);
if ($form->upload->receive()) {
  $model->saveUpload(
    $this->_identity, $form->upload->getFileName(null, false),
    $original_filename
  );
}

Обратите внимание, как мы фиксируем $ original_filename (если оно вам нужно) перед тем, как выполнять receive (). После получения () мы выполняем getFileName (), чтобы получить то, что фильтр переименования выбрал в качестве нового имени файла.

Наконец, в методе model-> saveUpload вы можете сохранить любые данные в своей базе данных.

2
ответ дан 2 December 2019 в 07:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: