sauvegarde un valeur de type array en cv_id

Par aymen, il y a 14 ans


public function add() {
if ($this->request->is('post')) {
$this->Exprience->create();
$users = $this->Auth->user('id');
$cvs = $this->Exprience->Cv->find('first',array('conditions' => array('user_id'=>$users)));
//$this->request->data'Exprience']'cv_id'] =intval($cvs);
// $this->set(compact('cvs'));
$this->Exprience->saveField('cv_id',$cvs);
//$this->Exprience->save(array('Exprience' => array('cv_id' => $cvs) );
if ($this->Exprience->save($this->request->data)) {
$this->Session->setFlash(__('The exprience has been saved'));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The exprience could not be saved. Please, try again.'));
}
}
$niveaucariers = $this->Exprience->Niveaucarier->find('list');
$pays = $this->Exprience->Pay->find('list');
$secteurs = $this->Exprience->Secteur->find('list');

$this->set(compact('niveaucariers', 'pays', 'secteurs'));
}
message d'erreur

18 réponses

elscorto, il y a 14 ans

Bonjour,

Je suis en train de créer un (site|application) où je gère des cvs, mais lors de l'enregistrement d'un cv, j'ai un message d'erreur,

Voici mon code (cf au dessus)

et mon message d'erreur, le champs array n'existe pas dans la table.
]

Voilà une fois les bonnes manières posées on comprend mieux, pour ta réponse, je dirai que ton problème vient des datas que tu met dans ton save, le soucis est que ton find first te renvois un tableau et ton saveFiled attend une valeur.

Donc deux façon, soit dans le saveField, tu mets $cvs'Cv']'id'](je présume que c'est l'id) ou alors dans ton find('first') tu lui demande de renvoyer l'indice courant de cette manière

$cvs = current($this->Exprience->Cv->find('first',array('conditions' => array('user_id'=>$users))));
$this->Exprience->saveField('cv_id',$cvs'id']);

Tu ne précises pas non plus de champs, dans ton find, donc lui te récupère tout tes champs, ça peut planter aussi de là, il semblerait que ça soit l'id que tu veilles récupéré, tu peux préciser dans ton find de cette manière

$cvs = $this->Experience->Cv->find('first',array('fields'=>array('id'),'conditions' => array('user_id'=>$users)));

Après avec le peu d'info que tu donnes, je saia pas si c'est ce que tu veux, ne m'en veux pas pour la remarque du début mais un peu de politesse, ça fait plaisir et on obtient généralement des réponses plus rapidement.

aymen, il y a 14 ans

merci elscorto pour votre aide le code est marche bien :))

elscorto, il y a 14 ans

De rien, la prochaine fois oublie pas la politesse ;)

aymen, il y a 14 ans

oki ;)

aymen, il y a 14 ans

plz comment fait 2 bouton en view de add experience chacun fait une fonction le premier sauvegarde et redirect a un autre controlleur et la 2 éme faire apele une autre fois a la fonction add experience et sauvgarde le donné (ajouter une autre expérience)
et merci d'avance ;)

elscorto, il y a 14 ans

re,

écris en anglais si c'est plus simple pour toi ;)

Si j'ai bien compris tu veux deux bouton qui te renvois vers deux action, tu dis que l'un deux renvois vers un autre controller, dans ce cas là pourquoi tu ne fais pas 2 formulaires, 1 pour celui qui renvois sur l'autre controller et le 2nd qui renvois vers ton action add_experience

aymen, il y a 14 ans

Form to add an experience contains two button following the first and the other adds another experience in the same form

aymen, il y a 14 ans

je fait un seul formulaire puisque les même champ j'utilise et le bouton ajoute une autre expérience taper si l'utilisateur possède plus qu'une expérience et l'autre fonction comme validation

elscorto, il y a 14 ans

ok je vois le truc

Il faut que tes deux submit ait des name différent comme

$this->Form->submit('Add Experience',array('name'=>'add'));
$this->Form->submit('Save All',array('name'=>'save'));

Puis dans ton action add, tu vérifies quel submit a été cliqué et tu fais le traitement que tu veux par

if($this->request->is('post')){
    // cas bouton add
    if(!empty($this->request->data'Cv']'add'])){
        $this->Cv->save($this->request->data);
        // tu rediriges vers ton formulaire
        $this->redirect(array('controller'=>'cvs','action'=>'add'))
    }
    // cas bouton save
    else{
        $this->Cv->save($this->request->data);
        // tu redirige vers ton autre page
        $this->redirect(array('controller'=>'cvs','action'=>'index'));
    }
}

Je pense que ça doit correspondre à ce que tu souhaites

aymen, il y a 14 ans

elle ne mais fonctionne pas . les deux bouton redirige toujours au même action

aymen, il y a 14 ans

cette condition ne marche pas"if(!empty($this->request->data'Cv']'add']))"
toujours "else" qui fonctionne

elscorto, il y a 14 ans

Si tu fais un debug sur $this->request->data, sur les 2 boutons, qu'est ce que ça te sort?as tu bien une différence?

aymen, il y a 14 ans

oui il y'a une déférence sur la 1 ère bouton affiche 'add'=>'add experience ' et sur la 2 ème bouton affiche 'save'=>'save all'

aymen, il y a 14 ans

array(
'add' => 'Add Experience',
'Exprience' => array(
'niveaucarier_id' => '1',
'etat' => '0',
'nomentreprise' => '',
'ville' => '',
'pay_id' => '1',
'poste' => '',
'secteur_id' => '1',
'debut' => array(
'month' => '04',
'day' => '01',
'year' => '2012'
),
'fin' => array(
'month' => '04',
'day' => '01',
'year' => '2012'
),
'description' => ''
)
)

aymen, il y a 14 ans

array(
'save' => 'Save All',
'Exprience' => array(
'niveaucarier_id' => '1',
'etat' => '0',
'nomentreprise' => '',
'ville' => '',
'pay_id' => '1',
'poste' => '',
'secteur_id' => '1',
'debut' => array(
'month' => '04',
'day' => '01',
'year' => '2012'
),
'fin' => array(
'month' => '04',
'day' => '01',
'year' => '2012'
),
'description' => ''
)
)

elscorto, il y a 14 ans

Je pense savoir pourquoi, pourquoi tu n'as pas le nom du modèle dans tes debugs ?

Essaye plutôt comme ça voir if(!empty($this->request->data'add']))

aymen, il y a 14 ans

bien bien sa marche merci beaucoup :)

aymen, il y a 14 ans

je un problème sur le routing quand je fait url de controler pages action show ne marche pas et voila erreur image de l'erreur
et doans le fechier route voila le code

Router::connect('page/:id-:slug', array('controller' => 'pages', 'action' => 'show'), array('pass'=> array('id','slug'), 'id'=>'[0-9]+','slug' =>'[a-z0-9\-]+'));

et le code de fichier show ce controller pages

function show($id = null,$slug = null){
        if(!$id)
            throw new NotFoundException('Aucune page ne correpond à cet ID');
        $page = $this->Offre->find('first',array(
            'conditions' => array('id' => $id)
            ));

        if(empty($page))
            throw new NotFoundException('Aucune page ne correpond à cet slug');
        if($slug != $page'Offre']'slug'])
           $this->redirect($page'Offre']'link'],301);
       $d'page'] = current($page);
       $this->set($d);
}