2017-02-05 1 views
1

Laravel 5.4 имеет новую функцию. Вы можете использовать Markdown в почтовых шаблонах.Как избежать строк в Laravel 5.4 Отслеживание писем?

Вот мой почтовый шаблон лезвия:

# Message for you! 

Hello {{ $user->name }}, 

@foreach($messages as $message) 
{{ $message->text }} 
@endforeach 

Greetings 

Моя проблема заключается в следующем: первый символ $message->text может быть # (номер знака или хэш), поэтому строка анализируется как заголовок ...

Update:

Вы можете избежать всех символов уценки с \ (https://meta.stackexchange.com/a/198231)

Я пытался избежать всех символов с этим кодом:

$text = str_replace(
    ['\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '#', '+', '-', '.', '!'], 
    ['\\\\', '\`', '\*', '\_', '\{', '\}', '\[', '\]', '\(', '\)', '\#', '\+', '\-', '\.', '\!'], 
    $text 
); 

Но я думаю, что это не рекомендуемый способ ...

Как я могу избежать строки ?

Привет

+0

Я рад, что вы нашли решение! Я думаю, вы можете использовать эту функцию: http://php.net/manual/en/function.addcslashes.php – PreDinnerSnack

ответ

1

ОК, я нашел свое решение! Вам необходимо создать новый почтовый компонент ...

Сначала вы должны опубликовать компоненты электронной почты из laravel с помощью php artisan vendor:publish --tag=laravel-mail (https://laravel.com/docs/5.4/mail#customizing-the-components). Теперь у вас есть папка vendor в вашем resources/views.

Зайдите в resources/views/mail/html и создайте новый файл .blade.php. Мой файл выглядит следующим образом:

<table class="notification" align="center" width="100%" cellpadding="0" cellspacing="0"> 
    <tr> 
     <td class="notification-meta"> 
      {{ $time }} 
     </td> 
    </tr> 
    <tr> 
     <td class="notification-content"> 
      {{ $slot }} 
     </td> 
    </tr> 
</table> 

Вы должны создать тот же файл под resources/views/markdown/html для простых текстовых сообщений.

Если вы смотрите в resources/views/mail/html/footer.blade.php вы можете увидеть следующую функцию в шаблоне:

{{ Illuminate\Mail\Markdown::parse($slot) }} 

Эта функция разбора уценки в HTML. Я не использую функцию в своем шаблоне.

Теперь я могу использовать мой компонент в почте как:

# Message for you! 

Hello {{ $user->name }}, 

@component('mail::notification', ['time' => '06.02.2017' ]) 
{{ $text }} 
@endcomponent 

Greetings 

И $text не разбираемый от уценки в HTML :)

2

Я не думаю, что это возможно, чтобы избежать первого символа в лезвии.

Возможный способ обойти это могло бы изменить «#» с HTML номером &#35;

В контроллере вы можете проверить, если сообщение начинается с # и заменить его &#35;

function replaceFirstChar($message) 
{ 
    if ($message[0] == "#") { 
     $new_message = '&#35' . substr($message, 1); 
     return $new_message; 
    } else { 
     return $message; 
    } 
} 

Я думаю, что это должно сработать.

UPDATE

addcslashes($str , '\ `*[]()#+-.!'); 

Это должно сделать трюк. (возможно, вам нужно добавить некоторые дополнительные символы)

+0

ОК, спасибо, это простое решение, но я должен избегать всех символов уценки в любом положении строки , Я думал, что существует синтаксис функции или лезвия, чтобы избежать разбора символов уценки. – poldixd

+0

Я обновил ответ. Я думаю, что это то, что вам нужно. – PreDinnerSnack

+0

спасибо! Я нашел решение. Посмотрите на это! – poldixd

Смежные вопросы