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)