清洁 Laravel 刀片模板文件的最佳方式是啥?

Posted

技术标签:

【中文标题】清洁 Laravel 刀片模板文件的最佳方式是啥?【英文标题】:What is the best way to cleanly emogrify a Laravel blade template file?清洁 Laravel 刀片模板文件的最佳方式是什么? 【发布时间】:2017-07-04 09:46:12 【问题描述】:

我正在使用an emogrifier 来格式化刀片模板的结果,以便我可以通过电子邮件发送它。

$html = View::make('emails.notification', [
    'data' => $data
]);

$emogrifier = new Emogrifier($html, null);

$result = $emogrifier->emogrify();

// now I can send the result in an email...

这可以按预期工作,但为了干净的代码和可测试性,我想扩展我的刀片模板以在模板本身内将 HTML emogrify。像这样的:

@emogrify
  <style>
    .red-text 
      color: red;
    
  </style>
  <p class="red-text">This text is red</p>
@endemogrify

...但看起来 Blade 指令不允许像这样打开/关闭标签。有没有更好的方法来实现这一点?

【问题讨论】:

如果您发现了我感兴趣的任何有趣的解决方案。 @AsTeR 我从来没有找到一个优雅的解决方案。我刚刚在刀片模板之外进行了表情化。 我最终也做了同样的事情! 【参考方案1】:

这是我在 laravel 中处理电子邮件刀片的方法(我通常不使用表情符号,但希望这会有所帮助):

创建一个基本的电子邮件刀片(通常在 resources/views/emails/email.blade.php 中):

<!DOCTYPE html>
<html lang="en-US">
<head>
    <meta charset="utf-8">

    <style>
       /* Include styles for all emails here */
    </style>

    @section('head')
    @show

</head>

<body>

<div class="email-body">
    @section('body')
    @show
</div>

</body>
</html>

然后当我想创建电子邮件时,我扩展刀片:

在 resources/views/emails/new-user-email.blade.php 中创建一个新文件:

@extends('emails.email')

@section('head')
    <style>

        /* Add additional styling here if you need to! */

    </style>
@stop

@section('body')

    <!-- Email body content here! -->
    <h1>Welcome new user!</h1>

@stop

【讨论】:

这并不能真正回答我的问题。我特别想知道如何使用修改 HTML 部分的自定义指令来扩展 Blade。或者,如果有其他干净的解决方案,我会全力以赴。 您是否查看过Extending A Blade 以添加您自己的指令?似乎无论如何您都必须渲染刀片主体,然后应用 Emogrifier。当您问“是否有更好的选择”时,我只是提供了一个替代方案。我发现通常更容易定义一个基本电子邮件刀片,其样式针对电子邮件使用,而不是依赖于 Emogrifier。

以上是关于清洁 Laravel 刀片模板文件的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

vue.js 组件使用 laravel 刀片作为模板

如何通过 ioncube 对 Laravel 刀片文件进行编码/加密

如何在刀片模板 laravel 中使用单个文件 vue 组件?

Laravel 模板显示路线中的两个刀片模板

如何通过ioncube对Laravel刀片文件进行编码/加密

Laravel刀片:模板无法渲染