Accesare un singur controller in mai multe view-uri (Laravel)

Am o nedumerire de care m-am lovit acum si la ora asta nu pot gasi o solutie :)) . Am o aplicatie laravel, in care as vrea sa accesez un controller in mai multe view-uri. De exemplu pe /blog am routa Route::get(’/blog’, ‘blogController’); si as avea nevoie de exemplu sa scot un foreach pe pagina de home din controller-ul blog. Cum as putea face asta? M-am gandit sa fac un partials dar nu e o solutie

Asa ceva?

Route::get('/blog', 'blogController@blogIndex');
Route::get('/home', 'blogController@homeIndex');
1 Like

Nu te inteleg,
ai ca punct de plecare un singur controller dar vrei mai multe view-uri , dar trebuie sa ai aceasi ruta pentru toate view urile?

Daca nu, poti efectiv sa pastrezi controllerul si faci o metoda pentru fiecare view in parte…

Care e problema cu partials? practic is doar sectionari ale altor view-uri pentru organizare, ai un view parinte care este returnat de catre controller eventual trimiti date in acel view. Tu incarci in controller doar view ul parinte ce incarca partials…

ai clasa {
metoda 1 {
return view(view1
}

metoda 2 {
return view(view2
}

metoda 3 {
return view(view3
}
metoda 4 {
return view(view4)
}
}

view3 .blade.php
include _partial_view3.blade
include __partial2_view3.blade

iar pentru fiecare view ai alta ruta…, acelasi controller dar alta metoda…

1 Like

sper ca te ajuta !

Update: mi se pare mai bun acest raspuns !
In link-ul original, prin comentarii, cineva zice acest lucru:

The best practice is to create a controller method for each page.

Desi nu am lucrat cu Laravel, in ASP .NET MVC faceam acelasi lucru. Aveam clasa MyController in care scriam o metoda pt fiecare View.

1 Like

Explica te rog ce anume vrei sa realizezi. There are a bunch of us here, poate exista o solutie mai putin complicata.

Sa explic exact care e situatia mea :)) /blog era un exemplu.

Eu am ruta Route::resource(‘gallery’, ‘GalleryController’);

Am nevoie de acele imagini din gallerie si pe home unde am un slider si pe o alta pagina unde este tot un slider si am nevoie sa fac un foreach sa scot acele imagini din gallery.

Deci mai pe scurt vreau sa folosesc GalleryController in 3 view-uri diferite (’/home’, ‘/gallery’, ‘/page’)

Nu sunt sigur dar cred ca le-ai incurcat tu defapt vrei sa incarci acelasi view de mai multe ori…
AI un viewhome.blade.php in care e suficient sa incarci view urile respectiv, tu te folosesti de fiecare metoda pentru a trimite date catre view.

Inteleg, dar nu poti folosi un controller pentru un view, se foloseste o metoda pentru un view, punctul de plecare este de la view la controller nu si invers. De ce nu apelezi un serviciu, un call catre DB sa iei imaginile si numa ii setezi ca parametru la render view

return view('gallery')->with(['images' => $images]);
return view('home')->with(['images'  => $images, 'other' => 'other'])

Sau daca ai in gallery deja un view poti sa-l incarci intr-o variabile:

$view = View::make('gallery');
$contents = (string) $view;
$contents = $view->render();

Si la fel cum mai sus il trimiti ca un html (care este gallery view) catre view-ul home

Am inteles acum. Tu vrei sa transmiti date in mai multe view-uri. Cred ca asta prezinta cea mai buna solutie pentru ce ai tu nevoie:

4 Likes

Nu e neaparat nevoie, putea efectiv sa faca un array in metoda controllerului, sa trimita acel obiect catre view fara view composer. In laravel 5.2 si 5.3 se foloseste.Tu aici ai 5.4.
Folosea compact ca si metoda pentru trimiterea datelor catre view si incarca acel view in view ul parinte.

Recunosc varianta ta este mai buna, mai actuala dar ii va fi mai usor sa inteleaga si twig ul daca merge pe varianta mea macar ca test.