Salut
Je veux mettre en cache mon blog et le reste de mon site web. Je utilise l'action cacheAction du helper Cache. Dans mon blog j'ai un système d'ajout de commentaire. J'ai mise en cache mon action show et quand il créer le cache. Le cache empêche l'ajout du commentaire dans la basse de donné. Voici mon action show de mon postscontroller :
[code]
/**
@return : An url with the id and a slug
*/
public function show($id = null, $slug = null){
if (!$id) {
throw new NotFoundException("Désolé, il y a acune article qui corresponde à cette ID");
}
$post = $this->Post->find('first',array(
'conditions' => array('online'=>1,'type'=>'post','Post.id' => $id,'Post.created <= NOW()'),
'recursive' => 0
));
if(empty($post)) {
throw new NotFoundException("Désolé, il y a acune page qui corresponde à cette ID");
}
if($slug != $post['Post']['slug']){
$this->redirect($post['Post']['ulink'],301);
}
// Add a comment
// Cette action ne doit jamais être mise en cache. Pour que les utilisateurs puissent continuer à ajouter des commentaire malgré que la page est en cache.
if(!empty($this->request->data)){
$this->request->data['Comment']['user_id'] = $this->Auth->user("id") ? $this->Auth->user("id") : 0;
$this->request->data['Comment']['post_id'] = $post['Post']['id'];
$this->Post->Comment->create($this->request->data, true);
$fields = array('user_id', 'post_id', 'content');
if(!$this->Auth->user("id")){
$fields[] = 'username';
$fields[] = 'mail';
}
if($this->Post->Comment->save(null, true, $fields)){
$this->Session->setFlash('Merci pour votre commentaire', 'notif');
$this->request->data = array();
}else{
$this->Session->setFlash('Impossible d\'envoyer votre commentaire', 'notif', array('type' => 'error'));
}
}
$comments = $this->Post->Comment->find('all', array(
'conditions' => array('Comment.post_id' => $post['Post']['id']),
'contain' => array('User'),
'fields' => array('Comment.id', 'Comment.user_id', 'Comment.content','Comment.created','User.username','User.avatar','User.id','Comment.username','Comment.mail')
));
$d['Post'] = $post;
$d['Comment'] = $comments;
$this->set($d);
}
[/code]
J'ai trouver un fonction qui permet de vider la cache quand un utilisateur va ajouter un commentaire :
Je veux savoir sit la fonction est correcte :
[code]
public function afterSave($created){
if($created){
Cache::clear();
foreach(glob(CACHE.'_cache') as $file){
unlink($file);
}
foreach(glob(CACHE.'views'.DS.'.php') as $file){
unlink($file);
}
}
}
[/code]
Merci de votre aide en avance!