#laravel
#laravel
Вопрос:
Я создал пользовательскую страницу 404 в своем проекте Laravel, создав папку с именем errors
, а внутри папки я создал файл с именем 404.blade.php
Однако, когда я использую компонент и пытаюсь передать данные с помощью этого компонента, я получаю сообщение об ошибке
<x-main-header-component></x-main-header-component>
</head>
<body>
<!-- Main Header -->
<x-main-navbar-component></x-main-navbar-component>
<!-- ... end User Menu Popup -->
error message here
<x-main-footer-component :message="$SocialMediaLinks"></x-main-footer-component>
</body>
</html>
ошибка, которую я получаю, это:
ErrorException
Undefined variable $SocialMediaLinks (View:
Что я могу сделать, чтобы передать данные компоненту main-footer
дальше errors/404.blade.php
?
Ответ №1:
Есть несколько способов, которыми вы можете достичь этого. Поскольку у нас нет доступа к 404Controller
или чему-то подобному, я обычно выдвигаю несколько идей:
- Непосредственно импортируйте целевой источник данных (например, модель). Это гарантирует результат, но вид может выглядеть некрасиво и не очень логично.
- Кэширование: Redis, Memcache или что-нибудь еще поможет. Если ваши представления с ошибками используют тот же источник данных, что и ваши целевые страницы (например, панель навигации, заголовок). Идея заключается в том, что вы будете использовать
Cache::remember()
для хранения и получения данных все, что захотите. Кэш - Просмотр composer: (Документы). Самый чистый способ, на мой взгляд. Вы просто делитесь данными со всеми представлениями (включая представления с ошибками), используя глобальное
*
регулярное выражение. - Используйте помощника: поскольку помощники доступны по всему миру, вы можете использовать его для хранения и извлечения данных по своему усмотрению.
Для обеспечения доступности компонента JavaScript framework просто включите его ( .js
файл) в представления ошибок в разделе resources/views/errors
.
Пример для 3-го метода:
В вашем AppServiceProvider@boot
:
view()->composer('*', function ($view) {
$view->with([
'somethingToShare' => "Hello world",
]);
});
В ваших представлениях об ошибках:
{{dd($somethingToShare)}}
Теперь, когда вы открываете свой целевой вид ошибок, он должен показывать «Привет, мир»
Комментарии:
1. можете ли вы опубликовать пример кода для 3-го композитора One View?
2. @Buildermine Я добавил пример для иллюстрации. Оставьте комментарий, если это сработало для вас.
3. да, это было здорово, я просто переработал свой код и сделал его меньше, спасибо, чувак, за вашу помощь 🙂
Ответ №2:
Я предполагаю, что вы вызываете $SocialMediaLinks в своем приложении или нижнем колонтитуле. если да, то используйте вспомогательную функцию. я добавлю свой пример ниже
@if (isset($seo))
<title>{{ $seo->title }}</title>
<meta name="description" content="{{ $seo->meta_description }}">
<meta name="keywords" content="{{ $seo->meta_keywords }}">
@else
@php
$seo = getSEO(); //helper function
@endphp
<title>{{ $seo->title }}</title>
<meta name="description" content="{{ $seo->meta_description }}">
<meta name="keywords" content="{{ $seo->meta_keywords }}">
@endif