Bonjour,
Tout est dans le titre je pense cela fait deux jours que je me prend la tete sur l'ajout d'un utilisateur dans index.ctp de ma vue users.
J'ai regarder partout mais rien ne fonctionne.
J'inclu une modal form.
Voici mon fichier index.ctp

<a data-target="#ConfirmAdd role="button" data-toggle="modal" id="trigger"></a>
    <div class="modal fade" id="ConfirmAdd" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                    <h4 class="modal-title"><?php echo __('Ajout d\'un utilisateur'); ?></h4>
                </div>
                <div class="modal-body">

                    <?php

                    echo $this->Form->create('User', array('default' => false));
                    echo $this->Form->input('username',array(array('class'=>'form-control'),'label'=>'Pseudo:','placeholder'=>'Votre pseudo'));
                    echo $this->Form->input('password',array(array('class'=>'form-control'),'label'=>'Mot de passe:','placeholder'=>'Votre mot de passe'));
                    echo $this->Form->input('mail',array(array('class'=>'form-control'),'label'=>'Adresse e-mail','placeholder'=>'Votre e-mail'));
                    echo $this->Form->input('group_id',array(array('class'=>'form-control')));

                    ?>

                </div>
                <div class="modal-footer">
                    <?php 
                        echo $this->Js->submit('Send', array(
                                       'before'=>$this->Js->get('#sending')->effect('fadeIn'),
                                       'success'=>$this->Js->get('#sending')->effect('fadeOut'),
                                       'update'=>'#success'
                                        ));
                       echo $this->Form->end();
                    ?>
                </div>
            </div>
        </div>
    </div>

Mon controller Users

class UsersController extends AppController {
/**
 * Components
 *
 * @var array
 */
        public $helpers = array('Js');
    public $components = array('Paginator','RequestHandler');
        public $uses = array('User');

      public function beforeFilter() {
            parent::beforeFilter();

            $this->Auth->allow();
    }
/**
 * index method
 *
 * @return void
 */
    public function index() {

            $this->User->recursive = 0;
            $this->set('users', $this->Paginator->paginate());

            $groups = $this->User->Group->find('list');
            $this->set(compact('groups'));
    }

        public function add() {

                if(!empty($this->data)){
                    if($this->User->save($this->data)){
                        if($this->request->is('ajax')){
                           $this->render('success','ajax');
                        }else{
                        $this->Session->setFlash('Message sent');
                        $this->redirect(array('action'=>'index'));
                         }
            }
        }     
        $groups = $this->User->Group->find('list');
        $this->set(compact('groups'));
    }

Mon JS

<script>
 $('#btn').click(function(event) {
       form = $("#user").serialize();
     $.ajax({
       type: "POST",
       url: "<?php echo site_url('UsersController/add'); ?>",
       data: form,
       success: function(data){
           $('.modal').modal('hide');
           $(".success").fadeIn(500).delay(2000).fadeOut(500);
           $("#user")[0].reset();

       }
     });
     event.preventDefault();
     return false;  
  });
</script>

Merci à tous les gens pouvant me filer un petit coup de pouce je cherche à bien comprendre mon erreur si il y'en a une.
Cordialement
Merci à tous

2 réponses


Lartak
Réponse acceptée

Bonjour.
Il y a plusieurs choses qui ne vont pas, dont certaines que tu aurais pu remarquer.
La première, dans ton code javascript, tu indiques un ID "user", alors qu'aucun de tes éléments de ta vue n'a cette ID.
Si par tout hasard, tu voulais renseigner l'ID du formulaire, par défaut CakePHP lui attriburait l'ID suivante : "UserIndexForm".
Ou alors, il te faut lui attribuer l'ID que tu souhaite en la passant dans les options de la méthode create, par exemple :

$this->Form->create('User', array('id' => 'user'));

Pareil pour ton bouton de soumission de formulaire, tu le renseigne dans le code javascript en tant que "btn", alors que si je ne me trompe pas, alors qu'encore une fois, aucun élément de ta vue ne se nomme ainsi.
Ensuite, l'url que tu indiques dans ton code javascript, est totalement fausse, ou alors, c'est que tu ne nous donne pas tout ton code.
Car :

echo site_url('UsersController/add');

ça n'existe pas sur CakePHP dans son code de base, c'est plutôt :

echo $this->Html->url(array('controller' => 'users', 'action' => 'add')); echo $this->Html->url('/users/add');

ou encore :

echo Router::url(array('controller' => 'users', 'action' => 'add'));

Donc, commence déjà par corriger ces points là et reviens par la suite si ça ne change rien ou si tu as toujours des problèmes.

uknowcreation
Auteur
Réponse acceptée

Un grand merci à toi effectivement je ne sais pas pourquoi, d'avoir des erreurs pareil j'ai quand meme corriger pas mal de chose en plus.
je link mon code ou une personne éventuel souhaiterai faire la même chose.
ps: La fin de journée éprouvante qui à mon avis m'a été défavorable ^^.
Merci à toi Lartak11.

view/user/index.ctp

<div class="modal-body">

                    <?php
                     $data = $this->Js->get('#user')->serializeForm(array('isForm' => true, 'inline' => true));
                     $this->Js->get('#user')->event(
                          'submit',
                          $this->Js->request(
                            array('action' => 'add'),
                            array(
                                    'update' => '#tabsuser',
                                    'data' => $data,
                                    'async' => true,    
                                    'dataExpression'=>true,
                                    'method' => 'POST'
                                )
                            )
                        );

                    echo $this->Form->create('User', array('id' => 'user'));
                    echo $this->Form->input('username',array(array('class'=>'form-control'),'label'=>'Pseudo:','placeholder'=>'Votre pseudo'));
                    echo $this->Form->input('password',array(array('class'=>'form-control'),'label'=>'Mot de passe:','placeholder'=>'Votre mot de passe'));
                    echo $this->Form->input('mail',array(array('class'=>'form-control'),'label'=>'Adresse e-mail','placeholder'=>'Votre e-mail'));
                    echo $this->Form->input('group_id',array(array('class'=>'form-control')));

                    ?>

                </div>
                <div class="modal-footer">
                <?php
                    echo $this->Form->end(__('Valider',array('class'=>'btn-success')));
                    echo $this->Js->writeBuffer();   
                ?>
                  <button type="button" class="btn btn-warning" data-dismiss="modal">Annuler</button>
                </div>

scriptjs

$(document).ready(function(){

    $('.submit').live('click',function(){
        $.ajax({
           type :'POST',
           url : 'add',
           layout : null,
           data : $('#user').serializerArray(),
           dataType : 'json',
           //validation correct du formulaire
           success : function(data){
           $('.modal').modal('hide');
           $(".success").fadeOut(20);
           $("#UserIndexForm")[0].reset();
           }
        });
        return false;
    });

});

Merci encore