通过刀片中的变量传递变量包括Laravel

时间:2019-03-14 17:25:35

标签: php laravel laravel-blade

我是Laravel的初学者,我正在练习将以前的(简单的)网站转换为Laravel。

基本上,我创建了一个具有HTML结构的模板,并使用 @includes @yield

更改了主要内容。

html template.blade.php 中有趣的部分就像

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<!-- Title -->
<title>@yield('title')</title>

....
....

<!-- CSS Customization -->
<link rel="stylesheet" href="/assets/css/custom.css">
@yield('css')

....
....

@include('include._header')
@include('include._test_script')
@include('include._footer')

....
....

<!-- JS Customization -->
<script src="/assets/js/custom.js"></script>
@yield('js')

路由器调用包含模板的 test.blade.php 。此刀片文件具有一些自定义php代码,其中包含 $ extra_script 变量

<?php $extra_script = " alert(0); console.log(0);";?>

@extends('layouts.template')

@section('css')
   ....
@endsection

@section('js')
    ...
    <script>
        {!! $extra_script !!}
    </script>
@endsection

加载此页面时,脚本运行正常,并且我看到警报消息的内容为0。

现在我正在尝试将 $ extra_string 更新到 /include/test_script.blade.php 文件中,但是没有工作。

此包含刀片文件如下:

 @php
     $extra_script = " alert(1); console.log(1);";
 @endphp

 or

 <?php $extra_script = " alert(1); console.log(1);"; ?>

结果没有错误,仍然显示警报(0)。

我知道在刀片模板中包含PHP代码而不是在控制器中包含PHP代码并不优雅,但这是一次快速,快速的移植,可以使网站在短时间内上线。

如何在视图中修复它?

1 个答案:

答案 0 :(得分:0)

我会说顺序不正确,首先test.blade.phptemplate.blade.php开始扩展。它是template.blade.php设置@include('include._extra_script')来将警报设置为1的那个,但是随着test.blade.php从该模板扩展而来,它正在将$extra_script覆盖为一个警告0的警报。