Использование MeioUpload с CakePHP 1.3 - PullRequest
2 голосов
/ 29 марта 2011

Я пытаюсь реализовать довольно простую загрузку изображений, используя поведение MeioUpload в CakePHP 1.3, но я не могу заставить его работать. Когда я пытаюсь сохранить $this->data в моем контроллере, он пытается сохранить обычный файловый массив (из-за отсутствия лучшего слова), а не только имя файла.

Вот что я делаю:

Я поместил meio_upload.php в / app / models / поведение

В моей модели я делаю следующее:

var $actsAs = array(
    'MeioUpload.MeioUpload' => array(
        'filename' => array(
            'dir' => 'img{DS}upload{DS}brawlers',
            'allowedMime' => array('image/png'),
            'allowedExt' => array('.png', '.PNG'),
            'zoomCrop' => false,
            'thumbsizes' => array(
                'normal' => array(
                    'width' => 150,
                    'height' => 150
                )
            ),
            'default' => 'default.png',
            'length' => array(
                'minWidth' => 100,
                'minHeight' => 100,
                'maxWidth' => 150,
                'maxHeight' => 150
            )
        )                  
    )    
);

На мой взгляд, у меня есть следующая форма:

<?php
echo $this->Form->create('Brawler', array('type' => 'file'));
echo $this->Form->input('name', array(
                                      'label' => 'Name',
                                      'maxLength' => '45'
                                      )
                        );
echo $this->Form->input('comment', array(
                                         'label' => 'Description',
                                         'rows' => '3'
                                         )
                        );
echo $this->Form->input('author', array(
                                        'label' => 'Your name)',
                                        'maxLength' => '45'
                                        )
                        );
echo $this->Form->input('email', array(
                                       'label' => 'Email (will not be shown)',
                                       'maxLength' => '45'
                                       )
                        );
echo $this->Form->input(
                        'filename',
                        array(
                              'between'=>'<br />',
                              'type'=>'file',
                              'label' => 'Image (Max 2mb, 150x150 pixels, .png)'
                              )
                        );
echo $this->Form->end('Submit');
?>

И наконец, мое действие добавления в связанном контроллере выглядит следующим образом:

function add() {
    if (!empty($this->data)) {
        $this->Brawler->create();

        if($this->Brawler->save($this->data)) {
            $this->Session->setFlash('The brawler has been saved', true);
             $this->redirect(array('action'=>'index'));
        } else {
            $this->Session->setFlash('The Brawler could not be saved. Please try again.', true);
            debug($this->data);
            debug($this->validationErrors);
            die();
            //$this->redirect(array('action'=>'add'));
        }
    }
}

Для потомков вот мой дизайн стола:

delimiter $$

CREATE TABLE `brawlers` (
  `id` int(11) NOT NULL,
  `name` varchar(45) NOT NULL,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `comment` text,
  `email` varchar(45) NOT NULL,
  `author` varchar(45) NOT NULL,
  `filename` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8$$

Когда я пытаюсь отправить свою форму, я получаю следующий вывод:

app/controllers/brawlers_controller.php (line 37)
Array
(
    [Brawler] => Array
        (
            [name] => Viking
            [comment] => Herp. This is a description.
            [author] => Me
            [email] => me@gmail.com
            [filename] => Array
                (
                    [name] => 5.png
                    [type] => image/png
                    [tmp_name] => /storage/configuration/upload_tmp_dir/phpEF2okD
                    [error] => 0
                    [size] => 15863
                )

        )

)

app/controllers/brawlers_controller.php (line 37)

Очевидно, что это терпит неудачу, когда он пытается сохранить массив в поле имени файла. Изображение никогда не сохраняется в указанном каталоге загрузки. Кажется, что поведение meioupload на самом деле никогда не используется. Как я могу это проверить?

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

Ответы [ 3 ]

1 голос
/ 04 апреля 2011

Эй, у меня есть ответ для твоего запроса

То есть вы должны сделать переменную пыльника Скажите

$ d1 и скопируйте массив $ this-> date в этот массив, как показано ниже

$ d1 ['brawlers'] ['name'] = $ this-> data ['brawlers'] ['name'];

все переменные ur

$ d1 ['brawlers'] ['filename'] = $ this-> data ['brawlers'] ['filename'] ['name'];

и затем сохраните его как $ this-> brawlers-> save ($ d1);

0 голосов
/ 28 февраля 2013

У меня была та же проблема, используемая вами версия MeioUpload несовместима с вашей версией Cake. Я прекратил использовать версию 2.3 MeioUpload.

0 голосов
/ 04 апреля 2011

Я НЕ парень из PHP, но мне пришлось использовать CakePHP и Meio.Upload некоторое время назад.AFAIK вам нужно 4 поля в вашей базе данных для изображения:

  • имя файла (вы можете изменить имя этого в настройках)
  • dir
  • mimetype
  • размер файла

Судя по вашей ошибке и схеме БД, я бы сказал, что вам не хватает некоторых полей.

Редактировать: См. Документацию

...