Я пытаюсь загрузить изображение в приложении cakephp 3.x. Когда вы не загружаете изображение, другие данные сохраняются нормально, но с момента интеграции загрузки файлов функция загрузки изображений работает нормально, но другие данные не сохраняются. Ниже приведен пример кода. Пожалуйста, посмотрите, как я думаю, может быть какая-то незначительная проблема, которую мне не хватает, чтобы найти. Вот код для добавления действия в контроллере:Загрузка изображений и сохранение данных в CakePHP3
$team_member = $this->TeamMembers->newEntity();
if ($this->request->is('post')) {
if (!empty($this->request->data['photo']['name'])) {
$photo = $this->request->data['photo'];
$ext = substr(strtolower(strrchr($photo['name'], '.')), 1); //get the extension
$arr_ext = array('jpg', 'jpeg', 'gif'); //set allowed extensions
$setNewFileName = time() . "_" . rand(000000, 999999);
//only process if the extension is valid
if (in_array($ext, $arr_ext)) {
//do the actual uploading of the file. First arg is the tmp name, second arg is
//where we are putting it
move_uploaded_file($photo['tmp_name'], WWW_ROOT . '/uploads/' . $setNewFileName . '.' . $ext);
//prepare the filename for database entry
$imageFileName = $setNewFileName . '.' . $ext;
}
}
$team_member = $this->TeamMembers->patchEntity($team_member, $this->request->data);
if (!empty($this->request->data['photo']['name'])) {
$team_member->photo = $imageFileName;
}
if ($this->TeamMembers->save($team_member)) {
$this->Flash->success(__('Saved Successfully.'));
return $this->redirect([
'action' => 'index'
]);
}
$this->Flash->error(__('Failed to save. Try Again.'));
}
$this->set('team_member', $team_member);
Вот файл add.ctp:
echo $this->Form->create($team_member, ['enctype' => 'multipart/form-data']);
echo $this->Form->input('name');
echo $this->Form->input('photo', array('type' => 'file'));
echo $this->Form->input('excerpt');
echo $this->Form->input('content');
echo $this->Form->button('Save', ['class' => 'btn']);
echo $this->Form->end();
Обратите внимание, что ранее он работал хорошо, когда я не писал никакого кода для файла загрузить. И, версия CakePHP является 3.x
ТИА
Обычно это должно быть '$ this-> Form-> create ($ team_member, ['type' => 'file']);'. Я сомневаюсь, что он работает без правильного типа кодировки, заданного в сгенерированной форме. ** http: //book.cakephp.org/3.0/en/views/helpers/form.html#changing-the-http-method-for-a-form** – ndm
Я знаю, что enctype необходимо определить здесь, но все же если я добавлю enctype или define ['type' => 'file'], это не сработает. Я прочитал эту вспомогательную ссылку и много раз ссылался на книги, но она все еще не работает. Но, в любом случае, с этим неправильным кодом он работает сейчас. Если вы знаете, почему это происходит, дайте мне знать. –