Проблема, связанная с использованием черты в шаблоне почтовой рассылки - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь использовать метод php Trait внутри моего почтового шаблона уценки в laravel, проблема в том, что я получаю следующую ошибку:

 ErrorException  : Call to undefined method Illuminate\View\Engines\CompilerEngine::getExcerpt() (View: C:\xampp\htdocs\dtcburger.com\resources\views\emails\weekly\weekly-mail-1.blade.php)

Я пытаюсь использовать метод getExcerpt из моего класса Strings php Trait, но он не работает.

Это мой почтовый класс:

<?php
namespace App\Mail\weekly;


use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Traits\Strings;


class WeeklyMail1 extends Mailable
{


    use Queueable, SerializesModels;
    use Strings;
    public $mailData;


    public function __construct($mailData)
    {
        $this->mailData = $mailData;
    }


    public function build()
    {
        $mail = $this->markdown('emails.weekly.weekly-mail-1')
        ->from(env('MAIL_FROM'), env('MAIL_FROM_NAME'))
        ->subject($this->mailData['subject']);

        return $mail;
    }


}

И мой шаблон почтовой рассылки:


@component('mail::message', ['mailData' => $mailData])

# {{ $mailData['subject'] }}

@if(count($mailData['events']) > 0)
# No te pierdas nuestros próximos eventos
@component('mail::table')
|  |  |
| :------------- | :------------- |
@foreach($mailData['events'] as $event)
| <img src="{{ $event->image }}" style="min-width:120px; max-width:120px; min-height:100px; max-height:100px;"> | <strong><p>{{ $event->title }}</p></strong><p>{{!! $this->getExcerpt($event->body, 0, 100) !!}}</p> |
@endforeach
@endcomponent
@endif

@endcomponent

И моя черта Strings с методом getExcerpt внутри:

<?php

namespace App\Traits;

use Str;

trait Strings
{
    public function slugify($title){
        $cleanString = $this->cleanString($title);
        $slugified = Str::lower( Str::slug($title, '-') );
        return $slugified;
    }


    public function getExcerpt($str, $startPos = 0, $maxLength = 30, $end = '[...]') {
        if(strlen($str) > $maxLength) {
            $excerpt   = substr($str, $startPos, $maxLength - 6);
            $lastSpace = strrpos($excerpt, ' ');
            $excerpt   = substr($excerpt, 0, $lastSpace);
            $excerpt  .= $end;
        } else {
            $excerpt = $str;
        }

        return $excerpt;
    }

}

1 Ответ

0 голосов
/ 11 апреля 2019

Это потому, что вас больше нет в контексте класса WeeklyMail.

Я предлагаю вам сделать доступ к вашему событию. Модель, которая делает


use Strings;

function getExcerptBodyAttribute(){
      return $this->getExcerpt($this->body, 0, 100)
}

А потом в вашем шаблоне

<img src="{{ $event->image }}" style="min-width:120px; max-width:120px; min-height:100px; max-height:100px;"> | <strong><p>{{ $event->title }}</p></strong><p>{{!! $event->excerpt_body !!}}</p>

если ваше событие не является красноречивой моделью, просто сделайте сеттер, который установил его excerpt_body

...