Bonjour,

Voila je rencontre un petit problème avec mon code. Je tente en vain de régler le problème par moi-même depuis 2 jours et j'avoue que je suis partagé entre l'envie d'abandonner le tuto (poo -> creer les classe table) et celle de cogner sur mon clavier !

Non plus sérieusement, Mon code fonctionne très bien tant que j'ai un seul Foreach dans ma vue, mais à partir du moment ou je tente un second Foreach; j'obtiens un message d'erreur :

Fatal error: Call to a member function query() on a non-object in /blog/app/Database.php on line 31

j'ai d'abord pensé à une erreur dans ma requête (je n'en ai pas trouvée). alors pour être certain que mon problème ne venait pas de ma requête j'ai réécrit le premier foreach <?php foreach(\App\Table\Article::getLast() as $post): ?> ..... à la place du deuxieme sur mon code et curieusement le problème continue de se poser alors que le premier Foreach s'execute correctement.

Voici mon code :

<div class="row">
    <div class="col-sm-8">
        <?php foreach(\App\Table\Article::getLast() as $post): ?> 
            <h2><a href="<?= $post->url; ?>"><?= $post->titre; ?></a></h2>
            <p><em><?= $post->categorie; ?></em></p>
            <p><?= $post->extrait; ?></p>
        <?php endforeach; ?>
    </div><!-- end .col-sm-8 -->

    <div class="col-sm-4">
        <ul>
            <?php foreach (\App\Table\Categorie::all() as $categorie) : ?>
            <li><a href="<?= $categorie->url; ?>"><?= $categorie->titre; ?></a></li>
            <?php endforeach; ?>            
        </ul>
    </div><!-- end .col-sm-4 -->    
</div><!-- end .row -->

Je suis à court d'idée et ce sera avec plaisir que j'écouterais les votres. Merci d'avance de l'aide que vous m'apporterez !

4 réponses


sf100672
Auteur
Réponse acceptée

Bonjour,

Je suis venu vous dire que je m'en vais :-)

Bon finalement j'ai fini par refaire l'ensemble tu TP et tout fonctionne correctement

J'ai comparé mes anciens fichiers avec ceux que je viens de refaire et la seule différence que j'ai touvé provient de la méthode Categorie::all()

public static function all(){
        return App::getDb()->query("
            SELECT *
            FROM ".static::getTable() ."      
            ", get_called_class());
    }
moi j'avais saisi FROM".static::$table." au lieu de FROM".static::getTable()."

Bref tout fonctionne et je vous remercie sincèrement d'avoir essayé de m'aider.
sf100672
Auteur

Salut Matdosi,

Merci à toi pour l'aide que tu tente de m'apporter ;-)

Voici ce que me retourne ma requête :

Array
(
    [0] => App\Table\Categorie Object
        (
            [id] => 1
            [titre] => Piscine
        )

    [1] => App\Table\Categorie Object
        (
            [id] => 2
            [titre] => LongBoard
        )

)

Voici le code que j'ai exécuté pour obtenir le résultat ci-dessus :

<div class="row">
    <div class="col-sm-4">
            <?php
                               echo "<pre>";
                      print_r(\App\Table\Categorie::all());
                     echo"</pre>"; 
                 ?>         
    </div>
    <div class="col-sm-8">
        <?php foreach(\App\Table\Article::getLast() as $post): ?> 
            <h2><a href="<?= $post->url; ?>"><?= $post->titre; ?></a></h2>
            <p><em><?= $post->categorie; ?></em></p>
            <p><?= $post->extrait; ?></p>
        <?php endforeach; ?>
    </div>  
</div>

Mais cela ne résout en rien mon problème car pour obtenir ce résultat j'ai dû inverser mon code et maintenant c'est le code qui est en deuxième partie de ma vue qui renvoi le message d'erreur :

Fatal error: Call to a member function query() on a non-object in /blog/app/Database.php on line 31

cette nuit j'ai repris l'ensemble du tutoriel PHP POO histoire de réécrire tous les attributs et méthodes en me disant que j'avais certainement loupé une étape ; hélas pour moi je reviens au même résultat avec cette foutue "FATAL ERROR" sur cette satanée 31eme ligne de mon fichier Database.RRRRRRrrrrrrrrrrhhrhrhrhrhrhh

Bonjour,

Je remarque que ton :
print_r de App\Table\Categorie te retourne un objet avec un 'id 'et un 'titre' , or dans ta deuxième boucle foreach tu fais un:

    $categorie->url

Es-tu sur que la propriété url de ton objet categorie existe ?

sf100672
Auteur

Bonjour,

Je suis désolé de vous répondre si tardivement, mais je n'ai pas accès à mon pc (et donc mon code) jusqu'àu lundi 18/04 au soir.

Je vous répondrais Surement dans la journée de mardi en espérant que votre aide m'aidera à trouvé la solution.

Merci pour votre aide et à très bientot