在布局中的 Laravel 5.3 视图中包含 PHP 变量
Posted
技术标签:
【中文标题】在布局中的 Laravel 5.3 视图中包含 PHP 变量【英文标题】:Include PHP variables in a Laravel 5.3 view within a layout 【发布时间】:2017-04-08 17:10:22 【问题描述】:基于 Laravel 通知电子邮件模板,这是我正在尝试做的。
我尝试使用带有变量的电子邮件布局,以便在我的布局中定义一些样式,但可以在我的电子邮件视图中访问。
这是一个例子:
电子邮件/layout.blade.php
<!DOCTYPE html>
<html>
<head> [...]
</head>
@php
$style = ['body' => 'font-size:12px;color:#000;', 'paragraph' => 'font-size:10px;color:#eee;'];
@endphp
<body style=" $style['body'] ">
@yield('content')
</body>
</html>
在我的电子邮件视图中:
@extends('emails.layout')
@section('content')
<p style=" $style['paragraph'] ">
Hi there!
</p>
@endsection
但这不起作用,因为在我的部分中无法访问 $style
变量。
所以,我让它工作的唯一方法是在我的布局和视图中包含一个 PHP 文件,我很确定这不是我应该使用 Laravel 执行此操作的方式...
<?php include_once(base_path('resources/views/emails/variables.php')); ?>
有没有办法做到这一点? 谢谢大家!
【问题讨论】:
【参考方案1】:理想情况下,您不应该尝试以这种方式包含 PHP 变量。从控制器返回视图时,您应该将渲染视图所需的所有变量传递给它:
class YourController
public function yourMethod()
$styles = getYourStyles();
return view('emails.view')->with([
'styles' => $styles
]);
这将使您的样式在整个视图中的 $styles
变量中可用。
或者,您可以使用配置来存放您的变量,然后您可以在需要时轻松访问它们。
在 config/styles.php
return [
'paragraph' => 'font-size: 12px; font-weight: bold;'
];
在您的模板中:
<p style=" config('styles.paragraph') ">
【讨论】:
或者只使用 View::share()【参考方案2】:有几种方法可以解决这个问题。一种是在 Controller 中设置命名变量,而众多选项中的另一种是直接在 Blade View 中设置变量。
在刀片视图中设置变量 - [ ODD IDEA ]
<!--view_script.blade-->
<?php
$style = [
'body' => 'font-size:12px;color:#000;',
'paragraph' => 'font-size:10px;color:#eee;'
];
?>
<!DOCTYPE html>
<html>
<head> [...]
</head>
<body style=" $style['body'] ">
@yield('content')
</body>
</html>
在控制器中设置变量以供刀片视图使用
<?php
// FileName: SampleController.php
public function welcome()
$css = [
'body' => 'font-size:12px;color:#000;',
'paragraph' => 'font-size:10px;color:#eee;'
];
return view('sample.view')
->with(['style' => $css]);
?>
<!-- THEN INSIDE THE VIEW, YOU'D DO -->
<!DOCTYPE html>
<html>
<head> [...]
</head>
<body style=" $style['body'] ">
@yield('content')
</body>
</html>
有关如何处理此问题的更详细信息,您可能希望查看THIS LINK。
【讨论】:
感谢您的回答,但我想在我的所有视图中分享 $style,我不想在每个控制器中重新定义它。【参考方案3】:The standard way to do this would be
Inside /app/Providers/ComposerServiceProvider.php boot function
view()->composer('*',function($view)
$style = "datas";
$view->with(['style' => $style]);
);
现在,如果您只想包含其他模板,您的变量将在刀片模板中可用,只需给出名称而不是 *
例如。 /view/user/view.blade.php
view()->composer('user.view',function($view)
$style = "datas";
$view->with(['style' => $style]);
);
【讨论】:
以上是关于在布局中的 Laravel 5.3 视图中包含 PHP 变量的主要内容,如果未能解决你的问题,请参考以下文章