phplaravelnotificationslaravel-notification

Add a second action or a link to a Laravel Notification


I am sending a notification using Laravel and am having trouble figuring out how to send a second action. Here is my code for the toMail method:

public function toMail($notifiable)
    {
    return (new MailMessage)
        ->subject($this->options['subject'])
        ->greeting($this->options['greeting'])
        ->line($this->options['contentParagraph1'])
        ->line($this->options['contentParagraph2'])
        ->action('Facebook', 'https://www.facebook.com/')
        ->line($this->options['contentParagraph5'])
        ->action('LinkedIn', 'https://www.linkedin.com/')
        ->line($this->options['contentParagraph3'])
        ->line($this->options['contentParagraph4'])
        ->salutation($this->options['salutation']);
}

What I am getting, is only the second action. It looks like the second action is overriding the first one. Is there a way to keep both actions or to use a link instead of a button?


Solution

  • The SimpleMessage class is designed for creating simple messages that have one call to action button, you can find the code that powers the functionality in Illuminate/Notifications/Messages/SimpleMessage.php and the template for the SimpleMessage emails can be found in Illuminate/Notifications/resources/views/email.blade.php — note the single button.

    You can create more complex messages using the Markdown Mail Notifications feature, which will allow you to include as many buttons as you like. You can implement this like so:

    1. Run the command to generate a new notification and pass in the markdown option, e.g: php artisan make:notification InvoicePaid --markdown=mail.invoice.paid
    2. Open the newly created template, e.g: views/mail/invoice/paid.blade.php
    3. Add as many buttons as you like, e.g:

      @component('mail::message')
        # Introduction
      
        @component('mail::button', ['url' => $url1])
        Button 1 Text
        @endcomponent
      
        @component('mail::button', ['url' => $url2])
        Button 2 Text
        @endcomponent
      
        @component('mail::button', ['url' => $url3])
        Button 3 Text
        @endcomponent
      
        Thanks,<br>
        {{ config('app.name') }}
      @endcomponent
      
    4. Replace your calls to SimpleMessage methods with a reference to your markdown template when constructing your email, e.g:

      return (new MailMessage)
        ->subject($this->options['subject'])
        ->markdown('mail.invoice.paid', $this->options);
      

    The second parameter in the markdown method is an array to pass into your view, through this you can include the various values you'd like to include in your email, such as contentParagraph1, greeting and salutation.