簡體   English   中英

Laravel Blade 變量作用域

[英]Laravel Blade variable scope

擴展時,我在 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 應該可以被家用刀片訪問,但這似乎不是按這個順序發生的

所以在 laravel Blade模板中,變量的作用域是從父級傳遞給子級的。


Blade 模板的繼承

因此,如果您從像這樣返回視圖開始:

return view('template-1')->with([
    'var1' => 'Test One',
    'var2' -> 'Test Two',
]);

在您的刀片模板中,您可以使用{{ }}語法回顯這些:

{{ $var1 }} # Test One
{{ $var2 }} # Test Two

現在假設您正在使用@include ,您將在范圍內同時獲得var1var2並能夠覆蓋它們並為您分配新變量,如下所示:

@include('_includes.include-1', ['var2' => 'Foo', 'var3' -> 'Bar'])
{{ $var1 }} # Test One
{{ $var2 }} # Foo
{{ $var3 }} # Bar

現在,如果您想讓一個變量可用於擴展給定模板的所有刀片模板(即,如果 "template-1" 擴展app )。 您可以像這樣在ServiceProvider綁定全局變量;

刀片服務提供者

View::share('var4', 'Foo-Bar']);

現在您可以訪問所有模板中的var4

{{ $var1 }} # Test One
{{ $var2 }} # Test Two
{{ $var4 }} # Foo-Bar

以上答案是信息性的,因此被選為接受的答案。 然而,我找到了一個簡單的解決方案,將它放在 /routes/web.php 的頂部,以便它可以訪問基本視圖(沒有控制器)並且所有刀片都有范圍

\View::share([
    "myvariable1"=>"myValue1",
    "myvariable2"=>"myValue2";
]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM