2016-12-11 2 views
1

Ich kann nicht den Foto-Namen und Foto-Verzeichnis in der Benutzertabelle basierend auf eingeloggten ID speichern. Ich versuche, das Benutzerfoto für den vorhandenen Benutzer zu laden auf seiner verwendeten ID. Die Fotofelder werden für den vorhandenen Benutzer nicht aktualisiert. Ich versuche das Foto mit diesem Plugin josegonzalez hochzuladen. Bitte hilf mir.CakePHP 3.3 - Speichern von Bildern mit Plugin josegonzalez

<?php echo $this->Form->create($user, ['type' => 'file']); ?> 
     <?php echo $this->Form->input('photo',['type' => 'file', 'class' => 'form-control']); ?> 
     <?php echo $this->Form->input('photo_dir', ['type' => 'hidden']); ?> 
     <?php echo $this->Form->button(__('Submit'), ['type'=>'submit','class' => 'btn btn-success']); ?> 
     <?php echo $this->Form->end(); ?> 

UsersTable 
$this->addBehavior('Josegonzalez/Upload.Upload', [ 
     'photo' => [ 
      'fields' => [ 
       // if these fields or their defaults exist 
       // the values will be set. 
       'dir' => 'photo_dir', // defaults to `dir` 

      ], 
     ], 
    ]); 

    UsersController/add 
    public function add($id=null) 
    { 
if ($this->request->is('post')) { 
if (!$id) { 
      $id = $this->Auth->user('id'); 
     } 
     $user = $this->Users->get($id); 
     $fileName = $this->request->data['photo']['name']; 
      $user->photo = $fileName;  
    //$user = $this->Users->patchEntity($user, $this->request->data); 
    if ($this->Users->save($user)) { 
      $this->Flash->success(__('Your photo has been saved.')); 
      return $this->redirect(['action' => 'index']); 
    } 
     $this->Flash->error(__('Unable to add your photo.')); 
     } 
     $this->set('user', $user); 
     } 

Antwort

0

Haben Sie versucht, 'enctype' in Ihrem Formular-Tag zu verwenden?

<form enctype="multipart/form-data"> 

Es wird erklärt here.

+0

Mein Fehler, Formular-> create ($ user, ['type' => 'file']); ?> produziert den enctype – Aarrbee

+0

Ja, ich habe es versucht. Vielen Dank! aber es hat nicht funktioniert – Mythri

+0

Kannst du das debug von dieser-> Anfrage-> Daten in Ihrem Controller? Es wird mir helfen, mehr zu verstehen. – Aarrbee

0

Sie können Proffer Plugin verwenden. Es ist einfach zu bedienen und kann auch zum Erstellen von Thumbnails verwendet werden. Ich benutze es seit 3.1 und funktioniert gut. Es funktioniert sogar auf 3,3

https://github.com/davidyell/CakePHP3-Proffer

0

Dies ist, wie es funktioniert. Ich habe kein Plugin benutzt. Ich habe jedes Bild einzeln hochgeladen.

UsersController/Funktion hinzufügen.

public function add() 
{ 
    //check for logged in user authentication 
    $id = $this->Auth->user('id'); 
    $user = ''; 
    //check if the request is post 
    if ($this->request->is('post')) { 
     $user = $this->Users->get($id); 
      //check if upload file is not empty 
      if(!empty($this->request->data['photo']['name'])){ 
       $fileName = $this->request->data['photo']['name']; 
       $extention = pathinfo($fileName,PATHINFO_EXTENSION); 
       $arr_ext = array('jpg', 'jpeg', 'gif','png'); 
       //check for uploded file extension 
       if(in_array($extention, $arr_ext)){ 
       $newfileName=$id.'.'.$extention; 
       $destDir = WWW_ROOT .'img'. DS .'users'. DS . $newfileName; 
       //move uploded file to destination 
       if(move_uploaded_file($this->request->data['photo']['tmp_name'],$destDir)){ 
       $user->photo = $newfileName; 
       //save the uploded image in user table 
       if ($this->Users->save($user)) { 
       $this->Flash->success(__('Your profile photo has been uploaded successfully.')); 
       return $this->redirect([ 
         'controller' => 'Users', 
         'action' => 'view', $id 
         ]); 
       } else{ 
        $this->Flash->error(__('Unable to upload image, please try again.')); 
       } 
       }else{ 
       $this->Flash->error(__('Unable to upload image, please try again.')); 
       } 
       }else{ 
       $this->Flash->error(__('Please choose a image to upload.')); 
      } 
     } 
    } 
    $this->set(compact('user')); 
    $this->set('_serialize', ['user']); 
    $this->set('id', $id); 
} 
Verwandte Themen