Laravel Blade 变量范围

扩展时,我在 laravel 刀片中的可变范围有问题


home.blade.php(由控制器使用):


@extends('templates.BaseBlade')


@section('head')

    <?php

    echo $testvar;

    ?>

BaseBlade.blade.php:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html>

<head>

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

    <?php

        $testvar = "this is a test";

    ?>

我在想 BaseBlade 会被编译,然后 $testvar 应该可以被家庭刀片访问,但这似乎并没有按这个顺序发生


慕尼黑的夜晚无繁华
浏览 96回答 2
2回答

墨色风雨

所以在 laravelBlade模板中,变量的作用域是从父级传递给子级的。Blade tempalte的继承因此,如果您从这样的视图开始:return view('template-1')->with([&nbsp; &nbsp; 'var1' => 'Test One',&nbsp; &nbsp; 'var2' -> 'Test Two',]);在您的刀片模板中,您可以使用以下{{ }}语法回显这些:{{ $var1 }} # Test One{{ $var2 }} # Test Two现在假设您正在使用 an @include,您将在范围内同时获得var1&var2并能够覆盖它们并为您分配新变量,如下所示:@include('_includes.include-1', ['var2' => 'Foo', 'var3' -> 'Bar']){{ $var1 }} # Test One{{ $var2 }} # Foo{{ $var3 }} # Bar现在,如果您想让一个变量可用于所有扩展给定模板的刀片模板(即,如果 "template-1" extends app)。您可以像这样绑定全局变量ServiceProvider;BladeServiceProviderView::share('var4', 'Foo-Bar']);现在您可以访问var4所有模板{{ $var1 }} # Test One{{ $var2 }} # Test Two{{ $var4 }} # Foo-Bar

芜湖不芜

上面的答案是信息性的,因此被选为接受的答案。然而,我找到了一个简单的解决方案,将它放在 /routes/web.php 的顶部,以便基本视图(没有控制器)可以访问它并且所有刀片都有范围\View::share([&nbsp; &nbsp; "myvariable1"=>"myValue1",&nbsp; &nbsp; "myvariable2"=>"myValue2";]);
打开App,查看更多内容
随时随地看视频慕课网APP