Bonjour,

Désolé c'est encore moi! Mais puisque vous répondez si bien à mes questions en voilà une nouvelle plus difficile :p
Mon problème est le suivant. Quand j'édite/ajoute un post. Aucune erreur ne s'affiche mais la sauvegarde ne se fait pas. Alors qu'il y a quelques temps (je ne sais plus j'ai tellement fais de modifs à force) ça fonctionnait très bien.

Quand je suis sur mon Mac avec MAMP je n'ai strictement aucune erreur d'affichée (mais ça ne fonctionne pas)
Quand je suis sur mon PC avec WAMP j'ai une erreur qui me dit cannot redeclare class Machintruc ... dans mon model Machintruc qui est complètement vide.

Alors comme l'erreur l'indique je fais certainement appel à cette class plusieurs fois mais où ? Quand ? Comment ? Telle est la question.

Voici les fichiers concernés

<?php 
class Post extends AppModel{
    public $actsAs = array('containable');
    public $hasMany = array(
        'Media' => array(
            'dependent' => true
        ),
        'PostTag'
    ); 
    public $belongsTo = array(
        'Category' => array(
            'counterCache' => array('post_count' => array('Post.online'=>1))
        )
    );
    public $hasAndBelongsToMany = array('Tag');
    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 ASC';
    /**
     * 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,$primay = false){

        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;
    }
    function beforeSave($options = array()){
        if(!empty($this->data'User']'password'])){
            $this->data'User']'password'] = AuthComponent::password($this->data'User']'password']); // il n'y a qu'un paramètre à entrer
            return true;
        }   
    }
    public function afterSave($created){
        if(!empty($this->data'Post']'tags'])){
            $tags = explode(',',$this->data'Post']'tags']); 
            foreach($tags as $tag){
                $tag = trim($tag);
                if(!empty($tag)){
                    $d = $this->Tag->findByName($tag);
                    if(!empty($d)){
                        $this->Tag->id = $d'Tag']'id']; 
                    }else{
                        $this->Tag->create(); 
                        $this->Tag->save(array(
                            'name' => $tag
                        )); 
                    }
                    $this->PostTag->create(); 
                    $this->PostTag->save(array(
                        'post_id' => $this->id,
                        'tag_id' => $this->Tag->id
                    )); 
                }
            }
        }
        return true; 
    }
}

Mon model tag

<?php
class Tag extends AppModel{
}

PostsController

<?php 
class PostsController extends AppController{
    public $helpers = array('Date');
    public $components = array('RequestHandler');
    public $cacheAction = array(
        'index' => '2 DAY',
        'show' =>   '2 DAY'
    );
    function menu(){
        $posts = $this->Post->find('all',array(
            'conditions' => array('type' => 'post' ,'online' =>1),
            'fields' => array('id','slug','name')
        ));
        return $posts;
    }
    function index(){
        $this->Post->contain('Tag');
        $d'posts'] = $this->Paginate('Post',array('type'=>'post','online'=>1));
        $this->set($d);
    }
    function tag($name){
        $this->loadModel('PostTag');
        $this->PostTag->recursive = 0; 
        $this->PostTag->contain('Tag','Post'); 
        $posts = $this->Paginate('PostTag',array(
            'Tag.name'=>$name,
            'Post.type' => 'post',
            'Post.online' => 1,
            'Post.created <= NOW()'
        ));
        $post_ids = Set::Combine($posts,'{n}.PostTag.post_id','{n}.PostTag.post_id');
        $this->Post->contain('Tag'); 
        $d'posts'] = $this->Post->find('all',array(
            'conditions' => array('id'=>$post_ids)
        ));
        $this->set($d);
        $this->render('index'); 
    }
    function category($category){
        $cat = $this->Post->Category->find('first',array(
            'conditions' => array('slug' => $category)
        ));
        if (empty($cat))
            throw new NotFoundException(", pas d'animation de se nom là.");
        $d'posts'] = $this->Paginate('Post',array('type'=>'post','online'=>1, 'category_id' => $cat'Category']'id']));
        $this->set($d);
        $this->render('index');
    }
    function show($id = null, $slug = null){
        if(!$id)
        throw new NotFoundException(", l'article recherché n'existe pas.");
        $post = $this->Post->find('first',array(
            'conditions' => array('Post.id' => $id,'type'=>'post'),
            'recursive' => 0
        ));
        if (empty($post))
            throw new NotFoundException(", l'article recherché n'existe pas.");
        if($slug != $post'Post']'slug'])
            $this-redirect($post'Post']'link'],301);
        $d'post'] = $post;
        $this->set($d);
    }
    function feed(){
        if($this->RequestHandler->isRSS() ){
            $d'posts'] = $this->Post->find('all', array(
                'limit'=> 20,
                'conditions' => array('type'=>'post')
            ));
            return $this->set($d);
        }
    }
    function admin_index(){
        $d'posts'] = $this->Paginate('Post', array('type'=>"post",'online >= 0'));
        $this->set($d);
    }
    function admin_edit($id=null){
        if($this->request->is('put') || $this->request->is('post')){
            if($this->Post->save($this->request->data)){
                $this->Session->setFlash("Le contenu a bien été modifié","notif");
                $this->redirect(array('action'=>'index'));
            } 
        }elseif($id){
            $this->Post->id = $id;
            $this->request->data = $this->Post->read();
        }else{
            $this->request->data = $this->Post->getDraft('post');
        }
        $d'categories'] = $this->Post->Category->find('list');
        $this->Post->PostTag->contain('Tag');
        $d'tags'] = $this->Post->PostTag->find('all',array(
            'conditions' => array('PostTag.post_id' => $id)
        ));
        $this->set($d);
    }
    function admin_delete($id){
        $this->Session->setFlash('L\'article a bien été supprimée','notif'); 
        $this->Post->delete($id); 
        $this->redirect($this->referer()); 
    }
    function admin_delTag($id){
        $this->Post->PostTag->delete($id);
    }
}

model posttag (pour le HABTM)

<?php 
class PostTag extends AppModel{

    public $recursive = -1; 
    public $useTable = "posts_tags"; 
    public $actsAs = array('containable'); 
    public $belongsTo = array(
        'Post',
        'Tag' => array(
            'counterCache' => 'count'
        )
    ); 

    public function afterDelete(){
        $this->Tag->deleteAll(array(
            'count' => 0
        )); 
    }

}

Et enfin tagsController

<?php 
class TagsController extends AppController{
    function index(){
        $d'tags'] = $this->Paginate('Tag');
        $this->set($d);
    }
    function admin_index(){
        $d'tags'] = $this->Paginate('Tag');
        $this->set($d);
    }

    function admin_edit($id = null){
        if($this->request->is('post') || $this->request->is('put') ){
            $d = $this->request->data'Tag'];
                if($this->Tag->save($d)){
                    $this->Session->setFlash("L'animateur a bien été enregistré","notif");
                }
        }elseif ($id) {
            $this->Tag->id = $id;
            $this->request->data = $this->Tag->read('name,id,phone,content');
        }
        $this->set($d);
    }
    function admin_delete($id){
        $this->Tag->delete($id);
        $this->Session->setFlash("L'animteur a bien été supprimé","notif");
        $this->redirect($this->referer());
    }
}

Auriez vous une idée du pourquoi du comment que ça marche pas ?
Encore une fois merci d'avance de votre patience <3

1 réponse


SwithFr
Auteur
Réponse acceptée

Problème résolu par magie... Cela venait en fait des tags je suppose. Donc ce que je vous conseil, si vous êtes prémiums c'est de télécharger les fichiers sources du tutoriel HABTM et de copier les fichiers Tag.php PostTag.php et PostController.php