Възможно ли е да се създадат етикети на Laravel Blade, които имат достъп до действията на контролера?

Искам да създам Blade таг, който може да извежда данни като публикации.
В момента използвам PageController, който връща изгледа show.blade.php.
В този изглед има някои самостоятелно създадени елементи (текст, изображения, ...) и сега имам елемент на Bloglist. Поради причината, че вече използвам контролер и маршрут, искам да създам Blade директива, която може да се справи с това.

Например:

@BlogList('$filter')
  //foreach with $posts 
@endBlogList

Между тези тагове трябва да има налична променлива $posts, която се връща от BlogController. $filter също е за BlogController за филтриране на публикациите.


person Hannes A    schedule 30.01.2020    source източник
comment
Това доста противоречи на MVC логиката за Laravel. Изгледите се връщат от контролерите, така че наличието на директива .blade, която осъществява достъп до функция на контролер, изглежда излишно/назад; контролерът, който връща изгледа, може да извика друга функция на контролера и да предаде резултата на изгледа, като $blogList = app()->make('AnotherController')->generateList();, след това return view('blog-list)->with('blogList', $blogList);. Преосмислете това, което се опитвате да постигнете.   -  person Tim Lewis    schedule 30.01.2020


Отговори (1)


Опитайте тази:

@foreach($posts as $post)

<li>{{$post->title}}</li>

@endforeach

това предполага, че вашият контролер изпраща $posts до вашия изглед.

късмет!

person hermesfelipe    schedule 30.01.2020
comment
Благодаря за вашият отговор! Но проблемът е, че за този изглед/маршрут е отговорен PageController, а не BlogController. Искам да получа достъп до BlogController с директивата @BlogList('$filter') Blade. - person Hannes A; 30.01.2020
comment
съжалявам, грешно съм разбрал въпроса ви. Не мисля, че изгледите могат да имат достъп до контролери, те могат да използват само това, което контролерите им предават (не съм сигурен обаче, аз също уча laravel). Можете да получите достъп до контролери от изгледи, но ще трябва да използвате ajax повикване за това. Тази връзка е първата, която намерих, когато търсих laravel 6 ajax call, ще намерите много информация как да го внедрите: itsolutionstuff.com/post/ Друг вариант е да извлечете $posts в рамките на PageController и да го предадете на изгледа... - person hermesfelipe; 18.02.2020