Laravel Область применения переменной лезвия - PullRequest
0 голосов
/ 19 марта 2020

У меня проблемы с переменной областью действия в 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 должен быть доступен для домашнего блейда, но, похоже, этого не происходит в этом порядке

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Таким образом, в шаблонах laravel Blade область действия переменной передается от родителей к детям.


Наследование Tempalte Blade

Так если вы начнете с повторения представления следующим образом:

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

В своем шаблоне блейда вы можете отобразить его с синтаксисом {{ }}:

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

Теперь скажите, что вы используете @include, вы получите оба var1 & var2 в области видимости и сможете переопределить их, назначив вам новые переменные, например, так:

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

Теперь, если вы хотите сделать переменную доступной для всех шаблонов блейдов, которые расширяют данный шаблон (то есть, если «шаблон-1» расширяет app). Вы можете связать глобальные переменные в ServiceProvider следующим образом:

BladeServiceProvider

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

Теперь у вас есть доступ к var4 во всех ваших шаблонах

{{ $var1 }} # Test One
{{ $var2 }} # Test Two
{{ $var4 }} # Foo-Bar
0 голосов
/ 09 апреля 2020

Выше ответ является информативным, поэтому выбран в качестве принятого ответа. Однако я нашел простое решение, поместив это в начало /routes/web.php, чтобы оно было доступно для базовых c представлений (без контроллеров) и все блейды имеют область действия

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