如何从@extends传递数据到@yield?

问题描述 投票:0回答:1

我有一些常见的数据从 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@yield('content').

我尝试了以下代码 -

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

但是得到的错误是这些变量未定义。

Undefined variable: theme

请你帮我如何将数据从@extend传递到@yield?Thank you in advance.

laravel
1个回答
3
投票

您应该使用视图合成器来完成这一任务。它们允许您只在一个地方调用相同的数据,从而在多个视图中传递相同的数据。

在你的 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 与你的控制器中的变量。

© www.soinside.com 2019 - 2024. All rights reserved.