Bonjour à vous! je fais une fois de plus appel à votre ingéniosité parce que je bloque sur un truc pourtant tout bête...
Je créer une petite application qui permet de créer un évènement (c'est en somme un article) qui sera organisé par un animateur (un user). C'est évènement a un type (une catégorie).

J'ai donc un table animateurs, post, categories.
Lorsque je suis sur mon administration, quand je veux éditer un évènement, j'ai un select avec le type d'évènement (là tout fonctionne) et j'aimerai avoir un select avec mes animateurs. j'ai bien un select mais vide. Donc je suppose que la liaison ne se fait pas.

admin_edit de POST :

<h1>Ajouter une animation à l'agenda :</h1>
<?php echo $this->Form->create('Post'); ?>
    <?php echo $this->Form->input('name',array('label'=>"Nom de l'animation")); ?>
    <?php echo $this->Form->input('slug',array('label'=>"URL", 'type'=>'hidden')); ?>
        <?php echo $this->Form->input('category_id',array('label'=>"Type d'animation")); ?>
        <?php echo $this->Form->input('animateur_id',array('label'=>"Animateur")); ?>
    <?php echo $this->Form->input('id'); ?>
    <?php echo $this->Form->input('content',array('label'=>"Contenu")); ?>
        <?php echo $this->Form->input('created',array('label'=>"Date de l'animation",'dateFormat'=>'DMY','timeFormat'=>24)); ?>
    <?php echo $this->Form->input('online',array('label'=>"En ligne ?",'type'=>'checkbox')); ?>
<?php echo $this->Form->end('Sauvegarder'); ?>
<?php $this->Html->script('tiny_mce/tiny_mce.js',array('inline'=>false)); ?>
<?php $this->Html->scriptStart(array('inline'=>false)); ?>
    tinyMCE.init({
        mode : "textareas",
                theme: "advanced",
                plugins : "inlinepopups,paste,image",
                theme_advanced_buttons1 : 'bold,italic,underline,|,bullist,numlist,|,justifyleft,justifycenter,justifyright,justifyfull,|,link,unlink,image,|,formatselect,|,code',
                theme_advanced_buttons2 : '',
                theme_advanced_buttons3 : '',
                theme_advanced_buttons4 : '',
                theme_advanced_toolbar_location: 'top',
                theme_advanced_statusbar_location: 'bottom',
                theme_advanced_resizing: true,
                paste_remove_spans: true,
                paste_strip_class_attributes: "all",
                image_explorer : '<?php echo $this->Html->url(array('controller'=>'medias','action'=>'index',$this->request->data'Post']'id'])); ?>',
                image_edit : '<?php echo $this->Html->url(array('controller'=>'medias','action'=>'show')); ?>',
                relative_urls : false,
                content_css : '<?php echo $this->Html->url('/css/wysiwyg.css'); ?>'
    });
        function send_to_editor(content){
                var ed = tinyMCE.activeEditor;
                ed.execCommand('mceInsertContent',false,content);
        }
<?php $this->Html->scriptEnd(); ?>

Model Post :

class Post extends AppModel{

    public $hasMany = array(
        'Media' => array(
            'dependent' => true
        )
    );
    public $belongsTo = array(
        'Category' => array(
            'counterCache' => array('post_count' => array('Post.online'=>1))
        ),
        'Animateur' => array(
            'className' => 'animateurs'
        )
    );
    public $recursive = 1;
    public $validate = array(
        'slug'  => array(
            'rule' => '/^[a-z0-9\-]+$/',
            'allowEmpty'    => true,
            'message' => "L'url n'est pas valide"
        ),
        'name' => array(
            'rule' => 'notEmpty',
            'message' => "Vous devez preciser un titre"
        )

    );
    public $order = 'Post.created DESC';
    /**
     * Permet de générer un brouillon
     */
    public function getDraft($type){
        $post = $this->find('first',array(
            'conditions' => array('online' => -1, 'type' => $type)
        ));
        if(empty($post)){
            $this->save(array(
                'type' => $type,
                'online' => -1
            ),false);
            $post = $this->read();
        }
        $post'Post']'online'] = 0;
        return $post;
    }
    public function afterFind($data){

        foreach ($data as $k => $d) {
            if (isset($d'Post']'slug']) && isset($d'Post']'id']) && isset($d'Post']'type'])) {
                $d'Post']'link'] = array(
                        'controller'    =>Inflector::pluralize($d'Post']'type']),
                        'action' =>'show',
                        'id' =>$d'Post']'id'],
                        'slug' =>$d'Post']'slug']
                );
            }
            $data$k] = $d;
        }
        return $data;
    }
    public function beforeSave(){
        if (empty($this->data'Post']'slug']) && isset($this->data'Post']'slug']) && !empty($this->data'Post']'name'])) 
            $this->data'Post']'slug'] = strtolower(Inflector::slug($this->data'Post']'name'],'-'));
        return true;
    }
}

En gros je veux faire exactement la même chose que pour les catégories donc j'ai fais un copier coller en changeant categorie par animateur etc. J'ai aussi ajouté le champs animateur_id dans la table posts. Et ça ne fonctionne pas. J'ai surement du oublier quelque chose ou faire un truc de travers. L'un d'entre vous serait trouver cette bavure ?

Merci beaucoup =)

2 réponses


SwithFr
Auteur
Réponse acceptée

Bonsoir et merci pour ta réponse.
Le problème était en fait au niveau du controller. Je n'envoyais pas les données à la vue...

salut, tu as mal écrit la classname, qui dois avoir le nom du model.

'Animateur' => array(
            'className' => 'Animateur',
            'foreignKey' => 'animateur_id'
        ),

ainsi ça devrais marcher ;)