我有一种情况,我有一个视图文件users.blade.php扩展master。并且master包含另一个名为header.blade.php的文件,我想将一些数据从users.blade传递给header.blade。
以下是文件的简化版本
/******Shared/master.blade.php ********/
<html>
<head>
<title>@yield('title')</title>
@include('shared.header')
</head>
<body >
@yield('content')
</body>
</html>
这是master.blade.php
/******Shared/header.blade.php ********/
<link rel="stylesheet" href="links to bootstrap" />
@yield('pagecss')
<link rel="stylesheet" href="links to other files" />
这是头文件
/********** Users.blade.php ***********/
@extends('shared.master')
@section('title', 'Dashboard')
@section('pagecss')
<link rel="stylesheet" href="links to css file" />
@endsection
<?php $pagecss = <<<CSS_FILES
<link rel="stylesheet" href="links to page css" />
CSS_FILES;
?>
/*********** Shared/header.blade.php **********/
@if(isset($pagecss))
{{-- */ echo $pagecss;/* --}}
@endif
@yield(&#39; pagecss&#39;)并不在header.blade中工作,但它在master.blade中有效。现在我无法将其粘贴到master中.blade因为有些文件会覆盖其他文件,所以它必须按特定的顺序排列。任何想法如何使yield.blade中的产量工作?
修改 我喜欢 Bharat Geleda 方法,我修改了代码以包含一些heredocs以使其更方便。但我认为它是一种黑客攻击,仍然在寻找更好的解决方案。
MediaCapture
答案 0 :(得分:0)
可能的解决方案是做到这一点
<?php $pagecss = '<link rel="stylesheet" href="links to css file" />'?>
/****** Users.blade.php *********/
@extends('shared.master')
@section('title', 'Dashboard')
master.blade.php将保持不变
/******Shared/master.blade.php ********/
<html>
<head>
<title>@yield('title')</title>
@include('shared.header')
</head>
<body >
@yield('content')
</body>
</html>
然后在你的头文件中你可以做到这一点
/******Shared/header.blade.php ********/
<link rel="stylesheet" href="links to bootstrap" />
@if(isset($pagecss))
{{ $pagecss }}
@endif
<link rel="stylesheet" href="links to other files" />
编辑:测试问题
main.blade.php(在你的情况下是主人)
<html>
<head>
@include('test.header')
</head>
<body >
@yield('content')
</body>
</html>
<强> header.blade.php 强>
<link rel="stylesheet" href="links to bootstrap" />
@yield('pagecss')
<link rel="stylesheet" href="links to other files" />
<强> users.blade.php 强>
@extends('test.main')
@section('content')
CONTENT
@endsection
@section('pagecss')
<link rel="stylesheet" href="links to css file" />
@endsection
输出:
<html>
<head>
<link rel="stylesheet" href="links to bootstrap" />
<link rel="stylesheet" href="links to css file" />
<link rel="stylesheet" href="links to other files" />
</head>
<body >
CONTENT
</body>
</html>
我猜这是预期的。
答案 1 :(得分:0)
如果它在主页上工作而不是在内部视图中工作很简单,这意味着您已经使用过它,而 Blade 只会采用更高级别并解决它(包括它内容应放在@yield
)内。
我想说的是,如果您的头文件中有@yield
,并且您已将其用作@section('pagecss')
,那么您将获得另一个视图,就像您的情况一样{ {1}}使用相同的语句Users.blade.php
刀片不会占用内部刀片。
<强> 解决方案 强>
很好但很愚蠢:
在共享标头刀片文件中创建另一个@section('pagecss')
,并将其命名为二级或类似名称。即@yield
好方法:
使用@yield('pagecss-2')
,该指令将附加(而不是覆盖)内容到布局