Передайте данные на пользовательскую страницу ошибок в laravel

#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 или чему-то подобному, я обычно выдвигаю несколько идей:

  1. Непосредственно импортируйте целевой источник данных (например, модель). Это гарантирует результат, но вид может выглядеть некрасиво и не очень логично.
  2. Кэширование: Redis, Memcache или что-нибудь еще поможет. Если ваши представления с ошибками используют тот же источник данных, что и ваши целевые страницы (например, панель навигации, заголовок). Идея заключается в том, что вы будете использовать Cache::remember() для хранения и получения данных все, что захотите. Кэш
  3. Просмотр composer: (Документы). Самый чистый способ, на мой взгляд. Вы просто делитесь данными со всеми представлениями (включая представления с ошибками), используя глобальное * регулярное выражение.
  4. Используйте помощника: поскольку помощники доступны по всему миру, вы можете использовать его для хранения и извлечения данных по своему усмотрению.

Для обеспечения доступности компонента 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