Bonjour,

Attention question de gros débutant !

Après avoir fais un peu de front-end j'ai débuté la POO et le PHP depuis 1 mois, mon idée et de développer un blog pour pouvoir découvrir ce magnifique univers qu'est le back en utilisant un framework :)

Voici mon problème :

J'ai crée deux pages, une page d'accueil et une page article pour visionner les articles (logique implacable) --> Les routes

Route::group(['middleware' => 'web'], function () {
    Route::get('/', function ()    {
        return view('welcome');
    });
    Route::resource('article', 'ArticleController', ['except' => 'destroy']);
});

Ensuite j'ai crée un controlleur pour les articles, pour l'instant j'ai seulement récupéré mes articles comme ceci :

use DB;
class ArticleController extends Controller
{
    public function index()
    {
        $articles = DB::select('select * FROM articles');

        return view('article', ["articles" => $articles]);  
    }
}

Sur la page article il n'y à aucun souçi tout ce qui est contenu dans ma table 'articles' est récupéré dans un joli foreach. Malheureusement (et je m'en doutais) lorsque je veux faire la même chose sur la page accueil ca ne fonctionne pas.

Est ce qu'il y aurais une solution pour récupéré ces articles sur toutes les pages ? Créer un controller pour la home et faire la même requête ? Un peu sale non ?

J'ai aussi entendu parler du view composer mais je ne comprend pas bien son utilité ...

Merci pour votre futur aide !

8 réponses


Non tésté, mais la méthode View::share pourrait te venir en aide.
https://laravel.com/docs/5.3/views

Déja tu peux utiliser eloquent pour tes requêtes, beaucoup plus propre (système de repository aussi)

$posts = Articles::all();

Pour ta home rien ne t'empeche de refaire une requête.

Merci à vous deux je vais chercher pour ces deux solutions ! Bonne journée :)

Non, non, non et non.

Tu fais n'importe quoi là. La logique de la base de donnée ne doit pas se trouver dans un Controller, mais dans un Model. Et c'est via ce model que tu va pouvoir accéder à tes articles.

Je te suggère la formation POO (ici) et la formation Laravel (ici.

Parce que les deux personnes t'ayant répondu ne t'aiguille pas du tout dans la bonne direction:

@resethread: Ce n'est pas DU TOUT à ça que sers le view.

@tom49: Eloquent ou non, ce n'est pas la question, en plus ce que tu montre c'est dans le cas où il utilise un Model, ce qui n'est pas son cas. Et c'est bien là son erreur.

TL;DR : Revois tes bases de POO, car tu fais n'importe quoi là ;)

Salut,

Je pense que @elhebert a parfaitement raison : il te faut suivre la formation POO puis celle consacrée à Laravel.
Cela dit, tu es sur la bonne piste, il faut effectivement utiliser le View Composer (celui-ci te permettant de partager des data à une ou plusieurs vues).
Donc, ta façon de voir le problème est correct, mais ton faible niveau en POO doit t'inciter à apprendre les bases en amont.
On ne met pas la charrue avant les boeufs ;)

@elhebert :
En quoi je l'aiguille mal en lui parlant de Eloquent afin qu'il utilise justement le model. Alors que tu dis par toi même que c'est un tord de pas l'utliiser.

@tom49: Parce qu'Eloquent est l'ORM. Avant de se servir de l'ORM, il faudrait qu'il apprenne les bases du MVC, dont l'utilité de la couche Model.

Il est plus utile de comprendre le fonctionnement de base d'un langage ainsi que les design pattern que de ne savoir utilisé que l'outils donné par un framework.

C'est pour ça qu'il vaut mieux lui conseiller de revoir ses bases en POO, ensuite de revoir les bases de Laravel, plutôt que de lui donner une solution toute faite qu'il ne comprendrais pas.

J'avoue que j'avais appris la POO avec un tuto sur tuto.com, j'ai bien compris le principe du model - view - controller mais alors la je n'ai pas assez réfléchis dutout et pas chérché dans la bonne direction, je vais me faire le tuto de grafik art ca sera un bon point je pense :)

merci à tous pour vos réponse !