根据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')); ?>
有没有办法实现这个目标? 谢谢你们!
答案 0 :(得分:3)
理想情况下,您不应该尝试以这种方式包含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') }}">
答案 1 :(得分:2)
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]);
});
答案 2 :(得分:1)
有几种方法可以解决这个问题。一种是在Controller中设置您的命名变量,而许多选项中的另一个选项是直接在Blade View中设置变量。
在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>
设置控制器中的变量以使用BLADE视图消耗
<?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。