Как передать данные из @extends в @yield? - PullRequest
1 голос
/ 23 апреля 2020

У меня есть некоторые общие данные, получаемые от helper. Теперь я хотел использовать эти данные во всем виде. Итак, я пытаюсь объявить эти данные в app.blade.php и передать их разделы.

Вот мой app.blade.php -

<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>ABC| @yield('title')</title>

    <!-- Fonts -->
    <link rel="dns-prefetch" href="//fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">

    <link href="{{ asset('/assets/plugins/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet">
    <link href="{{ asset('/assets/abc/css/style.css') }}" rel="stylesheet">

    <?php 
        //get theme
        $theme = AppHelper::instance()->getTheme();

        //get theme folder
        $themeFolder = $theme[0]->websiteAdmin;

        //set include files section path
        $includePath = 'frontend.'.$theme[0]->themeName.'.sections.';
    ?>
</head>
@yield('content')
</html>

Здесь я хочу передать переменные $theme, $themefolder, $includePath to @yield('content').

Я попробовал следующий код -

@yield('content', array('theme'=> $theme, 'themeFolder'=> $themeFolder, 'includePath'=> $includePath))

Но получаю ошибку, что эти переменные не определены.

Undefined variable: theme

Можете ли вы помочь мне, как передать данные из @extend в @yield? Заранее спасибо.

1 Ответ

3 голосов
/ 23 апреля 2020

Вы должны использовать View composers для выполнения sh этого. Они позволяют передавать одни и те же данные через несколько представлений, вызывая их только в одном месте.

В вашем providers/AppServiceProvider.php вы можете добавить следующее к вашему способу загрузки:

use Illuminate\Support\Facades\View; //import view facade

public function boot()
    {
        View::composer(['view-name', 'another-view-name'], function($view){

            $theme = AppHelper::instance()->getTheme();
            $themeFolder = $theme[0]->websiteAdmin;
            $includePath = 'frontend.'.$theme[0]->themeName.'.sections.';

            $view->with(compact('themeFolder', 'includePath', 'theme'));
        });

    }

View::composers первый аргумент принимает массив представлений, поместите сюда все представления, для которых вы хотите передать данные ['view-name', 'another-view-name'], он также может принимать одну строку.

Данные теперь будут доступны для указанных вами представлений до $themeFolder $includePath и $theme переменных

Если вы хотите, чтобы эти данные передавались во ВСЕ представления, вы можете сделать '*' в качестве первого аргумента. ПРИМЕЧАНИЕ , данные передаются в КАЖДЫЙ вид, который вы создаете, только '*', если вы хотите, чтобы каждый вид содержал данные! В противном случае, укажите мнения по отдельности.

Если вы хотите, чтобы все представления в определенной папке передавали данные, которые вы можете сделать 'folder-name.*'.

В качестве альтернативы, единственный другой способ передачи данных в @yield - это верните представление app.blade.php с переменными в вашем контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...