Cakephp 2x Загрузить изображение

Я пытаюсь загрузить изображение в мою локальную папку

Webroot/ IMG /

и сохраните имя изображения в базе данных. Кажется, все работает нормально, но изображение не сохраняется в путь

вот мой взгляд

<?php echo $this->Form->create(null,['url' => ['controller' => 'users', action' => 'update_image'],
array('enctype'=>'multipart/form-data')]); ?>
<?php echo $this->Form->input('User.id') ?>
<?php echo $this->Form->file('Profile.picture',['type'=>'file']) ?>
<?php echo $this->Form->end('submit') ?>

Мой контроллер

public function update_image(){

    $id = $this->Auth->user('id'); 
    $this->Profile->id = $id; 
    $this->set('profile', $this->User->findById($id)); 

    if ($this->request->is(array('post','put'))) {
    $frmData = $this->request->data;

        //Path to store upload image
        $target = "/teamjob_back/img/../img/".basename($frmData['Profile']['picture']);

        //Get the data from form
        $image = $frmData['Profile']['picture'];

        //save data to database
        $this->Profile->save($this->request->data);

        //Image store to the img folder
        if (move_uploaded_file($image['tmp_name']['name'], $target)) {
            echo "Image successfull";
        }
    }
}

И код

$image['tmp_name']['name']

дает мне ошибку недопустимого смещения строки.

EDITED Этот код работает на контроллере

if ($this->request->is('post')) { 
        $frmData = $this->request->data;  
        $tmp = $frmData['picture']['tmp_name']; 
        $hash = rand();
        $date = date("Ymd");
        $image = $date.$hash."-".$frmData['picture']['name'];
        $target = WWW_ROOT.'img'.DS.'uploads'.DS; 

        $target = $target.basename($image); 
        if (move_uploaded_file($tmp, $target)) {
            echo "Successfully moved"; 
        }
        else
        {
            echo "Error";
        }
    }

3 ответа

При создании файла для загрузки формы обязательно укажите enctype

 <?= $this->Form->create(NULL, ['enctype' => 'multipart/form-data']) ?>

Первое добавление

['type' => 'file']

в качестве опции для вашего файла, вместо того, чтобы пытаться отправить enctype.

второй $image это $this->request->data['Profile']['picture'] так что ты не можешь сделать ['tmp_name'] а также ['name'] вместе... отладить ($this->request->data['Profile']['picture'] и вы увидите, что вы могли бы иметь

$image['tmp_name']

или же

$image['name']

но не оба вместе.

Наверное, больше, но это хорошее начало.

Сначала вам нужно удалить "type => file", потому что вы уже используете функцию "file" помощника по формам, если мы используем "Form->input", то мы используем "type => file"

    e.g. $this->Form->input('email', array('type' => 'email'));
$this->Form->file('Profile.picture')

проверьте, что у вашего целевого пути есть разрешение на запись, pr($image), затем вы получите правильный формат массива $image['temp_name] или $image[0]['temp_name] и т. д. и поместите свое временное имя в функцию move_uploaded_file

e.g. move_uploaded_file(your temp_name)

Форма Помощник

Другие вопросы по тегам