Jak přizpůsobit e-mailové šablony oznámení Laravel 5.4 (záhlaví a zápatí)

Dobře, tak jsem narazil na tento problém nastavení e-mailové šablony pro aplikaci Laravel 5.4. Byl to „uvítací“ e-mail s použitím výchozí Laravelovy šablony. Výzvou bylo změnit záhlaví a zápatí šablony.

Všichni se snažíme přečíst dokumentaci co nejrychleji, a pokud to nebude fungovat, po celých 3 minutách čtení dokumentace přejdeme na stackoverflow nebo laracasty nebo jakékoli jiné fórum a očekáváme kód připravený pro kopírování a vložení. .

Věci jsou snadné, pokud si jen přejete změnit textovou zprávu a máte mnoho příkladů, jak to udělat, pomocí komponent pošty. Nenašli jsem však žádné odpovědi, jak změnit výchozí záhlaví a zápatí.

Komponenty

Laravel 5.4 představil komponenty Mailable. Můžete si o tom přečíst zde.



    {{$ slot}}

Jednalo by se o jednu výstražnou komponentu, která je v podstatě šablonou čepele. {{$ Slot}} by pak byla proměnná / místo pro vyřazení obsahu z jiné šablony / komponenty.

@component ('alert')
     Jejda!  Něco se pokazilo!
@endcomponent

Takhle. To by se vykreslilo

     Jejda! Něco se pokazilo!

Publikovat dodavatele Publikovat

Laravel zpočátku použije jejich komponenty skryté v jádru rámce, které můžete exportovat

php artisan vendor: publishing --tag = laravel-mail

Vytvoří poštovní a markdown složky uvnitř vaší složky / view / vendor složky. Uvnitř najdete komponentu, jako je rozvržení nebo záhlaví atd.

Vytváření oznámení

Co chcete udělat, je vytvořit oznámení, událost nebo třídu pošty, aby se e-mail, když se něco stane, vypálil.

Rozhodl jsem se jít s upozorněním. Při vytváření jakéhokoli oznámení (Další informace o tom, jak vytvořit oznámení pomocí řemeslníka), získáte třídu takto:

namespace App \ Notifications;
použijte Illuminate \ Bus \ Queueable;
použijte Illuminate \ Notifications \ Notification;
použijte Illuminate \ Contracts \ Queue \ ShouldQueue;
použijte Illuminate \ Notifications \ Messages \ MailMessage;
class UserRegistered rozšiřuje Notification
{
    použijte Queueable;
/ **
     * nezdokumentovaná proměnná třídy
     *
     * @var řetězec
     ** /
    veřejný uživatel $;
/ **
     * Vytvořte novou instanci oznámení.
     *
     * @return neplatné
     * /
    veřejná funkce __construct ($ user)
    {
        $ this-> user = $ user;
    }
/ **
     * Získejte kanály doručení oznámení.
     *
     * @param smíchal $ notifikovatelný
     * @return pole
     * /
    veřejná funkce prostřednictvím ($ notifikovatelné)
    {
        návrat ['mail'];
    }
/ **
     * Získejte poštovní reprezentaci oznámení.
     *
     * @param smíchal $ notifikovatelný
     * @return \ Illuminate \ Notifications \ Messages \ MailMessage
     * /
    veřejná funkce naMail ($ notifikovatelné)
    {
        návrat (nová MailMessage)
            -> from ('info@sometimes-it-wont-work.com ',' Admin ')
            -> předmět („Vítejte na portálu“)
            -> markdown ('mail.welcome.index', ['user' => $ this-> user]);
    }
/ **
     * Získat matici reprezentaci oznámení.
     *
     * @param smíchal $ notifikovatelný
     * @return pole
     * /
    veřejná funkce doArray ($ notifikovatelné)
    {
        vrátit se [
            //
        ];
    }
}

Zde věnujte pozornost metodě toMail a konstruktoru třídy, protože jí předáme objekt. Také si všimněte, že používáme

-> markdown („some.blade.php“);

Dalším krokem je vynutit toto oznámení, aby fungovalo. Někde ve vašem Registru Controller to možná budete chtít nazvat (Nebudete se zabývat tím, jak jej provedete, ať už synchronizovaným nebo zařazeným do fronty ...). Nezapomeňte na začátek uvést jmenný prostor oznámení.

$ user = User :: create ([
            'name' => $ data ['name'],
            'email' => $ data ['email'],
            'lastname' => $ data ['lastname'],
            'password' => bcrypt ($ data ['password']),
        ]);
$ user-> notification (new UserRegistered ($ user));

Proč jdu tak hluboko? Protože vám také chci ukázat, jak předat vaše data do e-mailové šablony.

Dále můžete přejít na zdroje / pohledy / mail / welcome / index.blade.php (Může to být libovolná složka a název souboru) a vložte ji takto:

@component ('mail :: layout')
    {{- Záhlaví -}}
    @slot ('header')
        @component ('mail :: header', ['url' => config ('app.url')])
            Název záhlaví
        @endcomponent
    @endslot
{{- Tělo -}}
    Toto je naše hlavní zpráva {{$ user}}
{{- Subcopy -}}
    @isset ($ subcopy)
        @slot ('subcopy')
            @component ('mail :: subcopy')
                {{$ subcopy}}
            @endcomponent
        @endslot
    @endisset
{{-- Zápatí --}}
    @slot ('zápatí')
        @component ('mail :: footer')
            © {{date ('Y')}} {{config ('app.name')}}. Super FOOTER!
        @endcomponent
    @endslot
@endcomponent

Nyní můžete do záhlaví snadno přidat libovolný obrázek nebo změnit odkaz uvnitř zápatí atd.

Snad to pomůže.

Sleduj mě na Twitteru
Přidejte mě na LinkedIn