Я использую Laravel Nova (с Laravel 6.x) и динамически генерирую страницы с помощью «Компонентов Blade» в течение JSON. Я пытаюсь динамически загружать представления блейдов, с которыми связаны запросы.
Обычно с помощью Laravel контроллеров вы предоставляете методы запросов и возвращаете представление с включенными данными:
return view('my-cool-view', [
'myData' => $data
]);
Я использую Laravel Nova и генерирую просмотры страниц по связанному URI:
routes.php
:
// Catch-all for routes; Ignores Nova routes
Route::get('/{uri?}', 'PageController@index')
->where('uri', '^(?!nova|manage.*$).*')
PageController.php
:
public function index(Request $request)
{
return view('page', [
'page' => Page::where('slug', Str::before($request->getRequestUri(), '?'))
->where('active', true)
->firstOrFail(),
]);
}
Внутри каждого Page
у меня есть JSON с пометкой content
, в котором находится содержимое страницы и связанные виды блейдов. Чтобы дать вам лучшее представление о content
в Новой:
In В блейд-представлении страницы я зацикливаю каждое содержимое и отображаю связанный «блейд-компонент»:
@if (! empty($page->content))
@foreach ($page->content as $content)
@includeIf('components.'. $content['layout'], $content)
@endforeach
@endif
Однако, скажем, у меня есть компонент news
, который загружает последние статьи. news
это его собственная модель и методы контроллера. Мне нужно, чтобы они были включены в компонент "Blade". Очевидно, что я мог бы написать JavaScript для извлечения данных, но я пытаюсь остаться в пределах лезвия.
Есть ли способ вставить скажем News::get();
в представление компонента "новости" блейд без явной записи что-то ужасное, например {{ $news = News::get(); }}
в блейд-файле или использование JavaScript? В идеале, я хотел бы, чтобы это вытащило из связанной NewsController
и обрабатывало нумерацию страниц, et c.
Заранее спасибо!