doulao1934 2017-01-05 13:21
浏览 50
已采纳

Laravel:通知中的HTML

I'm using the default notification system (Laravel 5.3) to send an email. I want to add HTML tags in message. This does not work (it displays the strong tags in plain text):

public function toMail($notifiable)
{
    return (new MailMessage)
                ->subject('Info')
                ->line("Hello <strong>World</strong>")
                ->action('Voir le reporting', config('app.url'));
}

I know it's normal because text is displayed in {{ $text }} in the mail notification template. I tried to use the same system as in csrf_field() helper:

->line( new \Illuminate\Support\HtmlString('Hello <strong>World</strong>') )

But it does not work: it displays strong as plain text.

Can I send HTML tags without changing the view? (I don't want to change the view: protecting text is OK for all other cases). Hope it's clear enough, sorry if not.

  • 写回答

4条回答 默认 最新

  • duanba2001 2017-01-25 16:31
    关注

    Well, you can also create a new MailClass extending the MailMessage Class.

    For example you can create this class in app\Notifications

    <?php
    
    namespace App\Notifications;
    
    use Illuminate\Notifications\Messages\MailMessage;
    
    class MailExtended extends MailMessage
    {
        /**
         * The notification's data.
         *
         * @var string|null
         */
        public $viewData;
    
        /**
         * Set the content of the notification.
         *
         * @param string $greeting
         *
         * @return $this
         */
        public function content($content)
        {
            $this->viewData['content'] = $content;
    
            return $this;
        }
    
        /**
         * Get the data array for the mail message.
         *
         * @return array
         */
        public function data()
        {
            return array_merge($this->toArray(), $this->viewData);
        }
    }
    

    And then use in your notification:

    Instead:

    return (new MailMessage())
    

    Change it to:

    return (new MailExtended())
    

    And then you can use content var in your notification views. For example if you publish the notification views (php artisan vendor:publish), you can edit email.blade.php in resources/views/vendor/notifications and append this:

    @if (isset($content))
    <hr>
        {!! $content !!}
    <hr>
    @endif
    

    We do it like this and works like a charm :D

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站