Bonjour,
Ce message ne me quitte pas depuis le début des tutos ...
J'ai revérifier les codes et je ne parviens pas à trouver la source du problème.
Au tuto numéro 6 il à fallu faire une nouvelle page "admin_index", au début la page s'affichait correctement mais dès que j'ai ajouté le :
<a href="<?php echo Router::url('admin/posts/edit/'.$v->id); ?>">Editer</a>
L'erreur est revenue ...
( ! ) Notice: Undefined property: PostsController::$Post in C:\wamp\www\Test\controller\PostsController.php on line 79
Call Stack
# Time Memory Function Location
1 0.0020 146760 {main}( ) ..\index.php:0
2 0.0350 246648 Dispatcher->__construct( ) ..\index.php:11
3 0.0420 273592 call_user_func_array ( ) ..\Dispatcher.php:18
4 0.0420 273776 PostsController->admin_edit( ) ..\Dispatcher.php:18
( ! ) Fatal error: Call to a member function findFirst() on a non-object in C:\wamp\www\Test\controller\PostsController.php on line 79
Call Stack
# Time Memory Function Location
1 0.0020 146760 {main}( ) ..\index.php:0
2 0.0350 246648 Dispatcher->__construct( ) ..\index.php:11
3 0.0420 273592 call_user_func_array ( ) ..\Dispatcher.php:18
4 0.0420 273776 PostsController->admin_edit( ) ..\Dispatcher.php:18
Voici le code ma page "admin_index.php":
<div class="page-header">
<h1><?php echo $total; ?> Articles</h1>
</div>
<table>
<thead>
<tr>
<th>ID</th>
<th>En ligne ?</th>
<th>Titre</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php foreach($posts as $k=>$v): ?>
<tr>
<td><?php echo $v->id; ?></td>
<td><span class="label <?php echo($v->online==1)?'success':'error'; ?>"><?php echo ($v->online==1)?'En ligne':'Hors ligne'; ?></span></td>
<td><?php echo $v->name; ?></td>
<td>
<a href="<?php echo Router::url('admin/posts/edit/'.$v->id); ?>">Editer</a>
<a onclick="return confirm('Voulez vous vraiment supprimer ce contenu'); " href="<?php echo Router::url('admin/posts/delete/'.$v->id); ?>">Supprimer</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<a href="<?php echo Router::url('admin/posts/edit'); ?>" class="primary btn">Ajouter un article</a>
et celui de ma page "PostsController.php" :
<?php
class PostsController extends Controller{
//Blog, liste les articles
function index(){
$perPage = 10;
$this->loadModel('Post');
$condition = array('online' => 1,'type'=>'post');
$d'posts'] = $this->Post->find(array(
'conditions' => $condition,
'limit' => ($perPage*($this->request->page-1)).','.$perPage
));
$d'total'] = $this->Post->findCount($condition);
$d'page'] = ceil($d'total'] / $perPage);
$this->set($d);
}
function view($id,$slug){
$this->loadModel('Post');
$d'post'] = $this->Post->findFirst(array(
'fields' => 'id,slug,content,name',
'conditions' => array('online' => 1, 'id' =>$id, 'type'=>'post')
));
if(empty($d'post'])){
$this->e404('Page introuvable');
}
if($slug != $d'post']->slug){
$this->redirect("posts/view/id:$id/slug:".$d'post']->slug,301);
}
$this->set($d);
}
//Admin ACTIONS
//Liste les différents articles
function admin_index(){
$perPage = 10;
$this->loadModel('Post');
$condition = array('type'=>'post');
$d'posts'] = $this->Post->find(array(
'fields' => 'id,name,online',
'conditions'=> $condition,
'limit' => ($perPage*($this->request->page-1)).','.$perPage
));
$d'total'] = $this->Post->findCount($condition);
$d'page'] = ceil($d'total'] / $perPage);
$this->set($d);
}
//Permet d'éditer un article
function admin_edit($id = null){
$this->loadModel('Post');
if($id === null){
$post = $this->Post->findFirst(array(
'conditions' => array('online' => -1)
));
if(!empty($post)){
$id = $post->id;
}else{
$this->Post->save(array(
'online' => -1
));
$id = $this->Post->id;
}
}
$d'id'] = $id;
if($this->request->data){
if($this->Post->validates($this->request->data)){
$this->request->data->type = 'post';
$this->request->data->created = date('Y-m-d h:i:s');
$this->Post->save($this->request->data);
$this->Session->setFlash('Le contenu a bien été modifié');
$this->redirect('admin/posts/index');
}else{
$this->Session->setFlash('Merci de corriger vos informations','error');
}
}else{
$this->request->data = $this->Post->findFirst(array(
'conditions' => array('id'=>$id)
));
}
$this->set($d);
}
//Permet de supprimer un article
function admin_delete($id){
$this->loadModel('Post');
$this->Post->delete($id);
$this->Session->setFlash('Le contenu a bien été supprimé');
$this->redirect('admin/posts/index');
}
//Permet de lister les contenus
function admin_tinymce(){
$this->loadModel('Post');
$this->layout = 'modal';
$d'posts'] = $this->Post->find();
$this->set($d);
}
}
?>
Et ci-dessous une partie du code de la page "Model.php" la ou l'erreur parle findFirst() :
public function find($req = array()){
$sql = 'SELECT ';
if(isset($req'fields'])){
if(is_array($req'fields'])){
$sql .= implode(', ', $req'fields']);
}else{
$sql .= $req'fields'];
}
}else{
$sql .= '*';
}
$sql .= ' FROM '.$this->table. ' as '.get_class($this).' ';
// Construction de la condition
if(isset($req'conditions'])){
$sql .= 'WHERE ';
if(!is_array($req'conditions'])){
$sql .= $req'conditions'];
}else{
$cond = array();
foreach($req'conditions'] as $k=>$v){
if(!is_numeric($v)){
$v = '"'.mysql_real_escape_string($v).'"';
}
$cond] = "$k=$v";
}
$sql .= implode(' AND ', $cond);
}
}
if(isset($req'limit'])){
$sql .= 'LIMIT '.$req'limit'];
}
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}
public function findFirst($req){
return current($this->find($req));
}
Si vous avez un début de solution à me soumettre ...
Bonne journée à tous.
Salut,
Ouais je l'ai fait mais il me retourne rien si je ne modifie pas d'article sinon il me retourne l'id de l'article logique quoi ...
@ +
----------------------[EDIT]----------------------
Bon j'ai une fois de plus refait le code pour la nième fois et cette fois ça fonctionne donc sujet résolu.
Merci à ceux qui y ont réfléchis.
Bonsoir,
tu peux faire un debug($id) juste avant ça :
$this->request->data = $this->Post->findFirst(array(
'conditions' => array('id'=>$id)
));
(en restant dans le else)
cordialement
Antho