2016-11-06 3 views
0

Я пытаюсь загрузить изображение в приложении 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

ТИА

ответ

-2

Я только что получил ответ. Я не знаю, почему он работает, потому что это логично, но сейчас он работает нормально. я просто заменить эту строку кода в файле add.ctp

echo $this->Form->create($team_member, ['enctype' => 'multipart/form-data']); 

в

echo $this->Form->create($team_member); 

В любом случае, теперь он работает нормально. Но все же, если вы можете пояснить, почему это так, потому что каждая форма, имеющая загрузку файлов, должна иметь enctype как multipart/form-data.

+0

Обычно это должно быть '$ 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

+0

Я знаю, что enctype необходимо определить здесь, но все же если я добавлю enctype или define ['type' => 'file'], это не сработает. Я прочитал эту вспомогательную ссылку и много раз ссылался на книги, но она все еще не работает. Но, в любом случае, с этим неправильным кодом он работает сейчас. Если вы знаете, почему это происходит, дайте мне знать. –

Смежные вопросы