Bonjour :)

J'ai besoin de votre aide, car après avoir parcouru toute la doc et cherché sur internet je suis toujours bloqué au même point sur mon projet depuis un certain temps ...

A l'origine j'ai un formulaire que voici :

model :

<?php
class Post extends AppModel{
    public $validate = array(
            'ref' => array(
                'rule' => '/^RFC-[0-9]{4,6}$/',
                'message' => 'Référence non valide'
            )
        );
}
?>

le controller :

function editrapport($id = null){
        if($this->request->is('put') || $this->request->is('post')){
            if($this->Post->save($this->request->data)){
            $this->Session->setFlash("L'opération a bien été modifiée","notif");
            $this->redirect(array('action'=>'index'));
            }
        }elseif($id){
            $this->Post->id = $id;
            $this->request->data = $this->Post->read();
        }
    }

et le formulaire (j'ai simplifié le code en enlevant tout le bootstrap (label et compagnie) pour que ça soit plus claire) :

<?php 
            echo $this->Form->create('Post', array('class' => 'form-horizontal')); 
            ?>
            <fieldset>

                <legend><?php echo __('Rapport d\'opération'); ?></legend>

                                <?php echo $this->Form->input('ref'); ?>
                                <?php echo $this->Form->input('intervenant'); ?>
                                <?php echo $this->Form->input('id'); ?>
                                <?php echo $this->Form->input('begindate'); ?>
                                <?php echo $this->Form->input('duration'); ?>
            </fieldset>
            <?php 
                $options = array(
                'class' => 'btn btn-primary btn-large',
                'label' => 'Enregistrer',
                'value' => 'Update!',
                'div' => array(
                    'class' => 'form-actions',
                )
                );

                echo $this->Form->end($options);
            ?>

Donc ce formulaire enregistre un "post" dans ma table post avec un id, un intervenant, une référence, une date de début et une durée.

Et on m'a maintenant demandé d'ajouter, sur ce formulaire, une checkbox, qui lorsqu'elle est coché, incrémente un compte appartenant à l'intervenant par la valeur de la durée. (par exemple si la durée est 60 et que l'intervenant est Tartempion, si il coche la checkbox, lors de la validation du formulaire son compte est augmenter de +60).

J'aurais besoin donc de votre aide pour m'aiguiller sur la piste à suivre car malgré avoir lu la doc, j'ai du mal à visualiser la chose ^^

J'ai créer une table counters, contenant 2 champs : intervenant(varchar) et value(int).

Vu que mes 2 tables contiennent le champ intervenant, je les ai lié par un relation counters hasmany posts et posts belongsto counters. Puis j'ai essayé, déjà sans la checkbox, de faire apparaitre le champs Counter.value donc mon formulaire et d'essayer de le modifier en entrant une valeur et en sauvegardant. mais déjà cette étape me pose souci :( !

Donc j'aurais plusieurs questions :

  • Suis-je déjà obligé de mettre des relations entre mes tables pour pouvoir les utiliser dans le même formulaire ?
  • Comment faire pour avoir mon input de counters dans mon formulaire posts ?
  • Comment faire, avec ou sans relation, pour que la sauvegarde s'effectue sur tous les champs ?

En espérant que vous pourrez m'apporter une réponse, car j'ai beau lire la docs dans tout les sens, je ne trouve pas de ... :)

Cordialement,

2 réponses


christophe4427
Réponse acceptée

Moi si j'étais moi je feinterai XD

Tu as un formulaire, avec une checkbox, tu dois vérifier si elle est cochée, oki pas de soucis ça c'est jouable.
Après dans ton controlleur bah tu charges le second model et tu enregistres dedans les infos que tu veux ^^ tu vois l'idée ? Tu n'as qu'un seul formulaire, mais tu enregistres à deux endroits différents, voili voilou

Jangobtz
Auteur
Réponse acceptée

Merci pour tes conseils :D Finalement j'ai choisit la facilité j'ai lié mes tables et utilisé un saveAssociated ^^ !