在布局中的Laravel 5.3视图中包含PHP变量

时间:2016-11-24 11:51:15

标签: php laravel laravel-5.3

根据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')); ?>

有没有办法实现这个目标? 谢谢你们!

3 个答案:

答案 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