Bonjour,
j'aissye de mettre en place un espace membre pour mon siteen local pour le momment.
Je voudrais faire des upload de fichierpour la mise a jour du profil, par contre j'arrive pas récupérer l'id du membre connecté, ci-dessous un copie des débug que j'ai ($_SESSION et de l'envoi de mon formulaire d'upload


app\Controller\UsersController.php (line 203)
Array
(
    [Config] => Array
        (
            [userAgent] => 365b9c4fac8ad1e5930c4ca4cae6f872
            [time] => 1429462795
            [countdown] => 10
        )

    [Auth] => Array
        (
            [User] => Array
                (
                    [id] => 1
                    [username] => Stephane
                    [mail] => test@test.fr
                    [role] => membre
                    [active] => 1
                    [firstname] => 
                    [lastname] => 
                    [content] => <p><em><span style="text-decoration: underline;"><strong>Test de la mise &agrave; jour d'un profit</strong></span></em></p>
                    [created] => 2015-04-15 23:36:26
                    [lastlogin] => 0000-00-00 00:00:00
                )

        )

    [Message] => Array
        (
        )

)

app\Controller\UsersController.php (line 204)
Array
(
    [Avatar] => Array
        (
            [name] => test
            [prive] => 1
            [id] => 
            [avatar] => Array
                (
                    [name] => téléchargement (1).jpg
                    [type] => image/jpeg
                    [tmp_name] => C:\wamp\tmp\phpF1CB.tmp
                    [error] => 0
                    [size] => 12127
                )

        )

)

Ci-dessous une copie de mon userController.php

<?php

class UsersController extends AppController{

    public $components = array('RequestHandler');
    public function beforeFilter(){
            parent::beforeFilter();

                if(role != 'admin'){
                    $this->layout = 'membre';
                }else{
                    $this->layout = 'admin';
                }       
        }
    function admin_index(){
        $d['users'] = $this->Paginate('User');
        $this->set($d);
    }
    function admin_edit($id = null){
        if($this->request->is('post') || $this->request->is('put')){
                $d = $this->request->data['User'];

                if($d['password'] != $d['passwordconfirm']){
                    $this->Session->setflash("Les mots de passes ne correspondent pas ","notif",array('type'=>'error'));
                }else{  
                    if(empty($d['password']))
                            unset($d['password']);
                if($this->User->save($d)){
                $this->Session->setflash("L'utilisateur a bien été enregistré ",'notif');

                    }
                }
        }elseif($id){
            $this->User->id = $id;
            $this->request->data = $this->User->read('username,role,id');   
        }
            $d = array();
            $d['roles'] = array(
                'admin' => 'admin',
                'user' => 'membre'          
            );
                $this->set($d);

    }
    function admin_delete($id){
        $this->User->delete($id);
        $this->Session->setflash("l'utilisateur a bien été supprimé ","notif");
        $this->redirect($this->referer());
    }
    function signup(){
        if($this->request->is('post')){
        $d = $this->request->data;
        $d['User']['id'] = null;        
            if(!empty($d['User']['password'])){
                $d['User']['password'] = $d['User']['password'];    
                }   

            if($this->User->save($d,true,array('username','password','mail','role'))){
                $link =array('controller'=>'users','action'=>'activate',$this->User->id,'-'.md5($d['User']['password']));
                App::uses('CakeEmail','Network/Email');
                $mail = new CakeEmail();
                $mail->from('noreply@localhost.com')
                    ->to($d['User']['mail'])
                    ->subject('Test::Inscription')
                    ->emailFormat('html')
                    ->template('signup')
                    ->viewVars(array('username'=>$d['User']['username'],'link'=>$link))
                    ->send();           
                $this->Session->setFlash("Votre compte a bien été créé",'notif');
                $this->request->data = array();
            }else{
                $this->Session->setFlash("Merci de corriger les erreurs",'notif',array('type' =>'error'));
            }
        }
    }
    public function login(){
        if ($this->Auth->user('id'));
            if ($this->Auth->login()){
                //$this->User->saveField('lastlogin',date('Y-m-d H:i:s'));
                $this->Session->setFlash('Vous vous êtes bien connecté',"notif");
                    $this->redirect('/');

            }else{
            $this->Session->setFlash('Erreur de mot de passe ou de pseudo',"notif", array('type'=>'error'));
        }
    }
    function subscribe(){
        if(!$this->Auth->user('id')){
            throw new NotfoundException();
            }
        if(!empty($this->request->data)){
        $duration = $this->request->data['duration'];
        $uid = $this->Auth->user('id');
            if(Configure:: read('Site.prices,$duration')){
            $price = number_format(Configure:: read('Site.prices,$duration'),2);
            $this->LoadModel('Transaction');
            $url = $this->Transaction->requestPaypal($price,"Compte premium $duration mois","action=subscribe&uid=$uid&duration=$duration");
                if($url){
                    $this->redirect($url);              
                }
            }
        }
    }
    function logout(){
        $this->Auth->logout();
        //$this->Session->destroy();
        $this->redirect('/');
    }
    function password(){
    if(!empty($this->request->params['named']['token'])){
        $token = $this->request->params['named']['token'];
        $token = explode('-',$token);
        $user = $this->User->find('first',array(
            'conditions' =>array('id' =>$token[0],'MD5(User.password)'=>$token[1], 'active' => 1)
            ));
            if($user){
                $this->User->id =$user['User']['id'];
                $password = substr(MD5(uniqid(rand(),true)),0,8);
                $this->User->saveField('password',Securty::hash($password,null,true));
                $this->Session->setFlash("Votre mot de passe a bien été reinitialisé, voici votre nouveau mot de passe : $password",'notif');
            }else{
                $this->Session->setFlash("Le lien n'est pas valide",'notif', array('type'=>'error'));

            }

    }
        if($this->request->is('post')){
            $v = current($this->request->data);
            $user = $this->User->find('first',array(
            'conditions' => array('mail'=>$v['mail'],'active'=>1)
            ));
                if(empty($users)){
                    $this->Session->setFlash('Aucun utilisateur ne correspond à ce mail','notif', array('type'=>'error'));
                }else{
                    App::uses('CakeEmail','Network/Email');
                    $link =array('controller'=>'users','action'=>'password','token',$user['user']['id'],'-'.md5($user['User']['password']));
                    $mail = new CakeEmail();
                    $mail ->from('noreply@localhost.com')
                        ->to($user['User']['mail'])
                        ->subject('Test::Mot de passe oublié ?')
                        ->emailFormat('html')
                        ->template('mdp')
                        ->viewVars(array('username'=>$user['User']['username'],'link'=>$link))
                        ->send();       
            }
        }
    }
    function activate($token){
        $token = explode('-',$token);
        $user = $this->User->find('first',array(
            'conditions' =>array('id' =>$token[0],'MD5(User.password)'=>$token[1], 'active' => 0)       
        ));
        If(!empty($user)){
            $this->User->id = $user['User']['id'];
            $this->User->saveField('active',1);
            $this->Session->setFlash("Votre compte a bien été activé",'notif');
            $this->Auth->login($user['User']);
        }else{
            $this->Session->setFlash("Ce lien d'activation n'est pas valide",'notif',array('type'=>'error'));       
            }
                $this->redirect('/');
                die();

    }
    function membre_edit(){
        $user_id = $this->Auth->user('id');
            if(!$user_id){
                $this->redirect('/');
                die();
                }
                $this->User->id = $user_id;
                $passError = false;
                    if($this->request->is('put') || $this->request->is('post')){
                        $d = $this->request->data;
                        $d['User']['id'] = $user_id;
                        if(!empty($d['User']['pass'])){
                            if($d['User']['pass1'] == $d['User']['pass2']){
                                $d['User']['password'] = $d['User']['pass1'];                       
                            }else{
                                $passError = true;
                            }
                        }   
                            if($this->User->save($d,true,array('firstname','lastname','password'))){
                                $this->Session->setFlash("Votre profit a bien été édité",'notif');                      
                            }else{
                                $this->Session->setFlash("Impossible de sauvegarder",'notif',array('type'=>'error'));
                        }
                        if($passError){

                        $this->User->validationErrors['pass2'] = array('les mots de passe ne correspondent pas');
                    }else{
                        $this->request->data = $this->User->read();
                    }
                    $this->request->data['User']['pass1'] = $this->request->data['User']['pass2'] = '';
            }
    }   

    function membre_avatar(){
        $user_id = $this->Auth->user('id');
        $this->User->id = $user_id;
            if($this->request->is('post')){
                $data = $this->request->data;
                    debug($_SESSION);
                    debug($data);die();                     
                // Création du dossier image

                $dir = IMAGES.'Membre'.'/'.$user_id;
                    if(!file_exists($dir))
                        mkdir($dir,0777);

                        // création du sous dossier image

                        $dir .= DS.'photo';
                            if(!file_exists($dir))
                                mkdir($dir,0777);

                $f = explode('.',$data['avatar']['name']);
                $ext = '.'.end($f);
                $filename = Inflector::slug(implode('.',array_slice($f,0,-1)),'-');

                // sauvegarde en base de données

                $success = $this->Avatar->save(array(
                    'name' => $data['Avatar']['file']['name'],
                    'url' => 'Membre'.'/'.$user_id.'/'.'photo'.'/'.$filename.$ext,
                    'user_id' => $user_id
                )); 
                    debug($success);die();
            }
        }
    function admin_login(){
            $this->redirect(array('action'=>'login','admin'=>false));
        }   
    function membre_index(){

        }
    function membre_message(){

        }
    }
?>

c'est la fonction suivant qui me pose soucis : function membre_avatar

je vous remercie de votre aide

Cafreunion

1 réponse


Normalement tu récupère l'iD avec $this->Auth->user('id') .
Maintenant si je regarde ton debug je vois un champs ID vide mais dans ta fonction membre_avatar, tu appelles le champs "user_id" et pas "id" :

$success = $this->Avatar->save(array(
                    'name' => $data['Avatar']['file']['name'],
                    'url' => 'Membre'.'/'.$user_id.'/'.'photo'.'/'.$filename.$ext,
                    'user_id' => $user_id // ici
                )); 

Si c'est cette erreur (à tester), alors ça devrait se résoudre si tu changes ça comme ça :

$success = $this->Avatar->save(array(
                    'name' => $data['Avatar']['file']['name'],
                    'url' => 'Membre'.'/'.$user_id.'/'.'photo'.'/'.$filename.$ext,
                    'id' => $user_id // nomme ici ton champs id au lieu de user_id
                ));