[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Jean Silva
Criador Jean Silva 09/08/2022

Olá professor, bom dia!

Tudo be?. Poderia me auxiliar relativo a essa situação?. Quero que toda vez que atualize um projeto ou salve, envie um e-mail com as informações do projeto.

Estou tendo o seguinte problema ao tentar enviar e-mail através do model, usando observers com Notification, segui a doc https://laravel.com/docs/9.x/eloquent#observers, inclui as traits, namespaces, portanto sempre o mesmo erro, :(

Illegal offset type in isset or empty', exception: 'TypeError', file: 'C:\\laragon\\www\\Back-end\\isos-backend\\vendor\\symfony\\var-dumper\\Caster\\PdoCaster.php', line: 76, trace: Array(32)}

ProjectController

public function update(UpdateProjectRequest $request, Project $project)
    {
        $this->authorize('update', $project);
        $project->update($request->validated());
        $project->programmingLanguages()->syncWithPivotValues($request->input('programmingLanguages', []), ['user_id' => auth()->id()]);
        $project->participatingCompanies()->syncWithPivotValues($request->input('participatingCompanies', []), ['user_id' => auth()->id()]);
        return new ProjectResource($project);
    }

ProjectObserver

 public function updated(Project $project)
    {
        $project->notify(new SendEmailNotification($project));
    }

EventServiceProvider

public function boot()
    {
        Project::observe(ProjectObserver::class);
    }

AppServiceProvider

public function boot()
    {
        // parent::boot();
        Project::observe(ProjectObserver::class);
    }

 

Manager Carlos Ferreira 09/08/2022

Olá, Jean!
Tudo bem?

Ajudo sim, claro;

No seu método update, você trabalhou com model binding?
Caso não, faltou instanciar o objeto:
$project = Project::find($id);
$project->update(...);

Tem o código no GitHub?

Carlos Ferreira
Criador Jean Silva 09/08/2022

Olá professor, bom dia!

Acabei utilizando o mail::send mesmo por enquanto.

Está funcionando, peguei de seu tutorial que até usa markdown, eu fiquei na dúvida, que quando eu vou fazer um foreach no blade, que é html do envio de e-mail, ele sempre da erro, acredito que eu esteja fazendo os parametros errado no loop.

Poderia me ajudar por favor?.

Erro: 'foreach() argument must be of type array|object, null given

ProjectController.php

public function update(UpdateProjectRequest $request, Project $project)
    {
        $this->authorize('update', $project);
        $project->update($request->validated());
        $project->programmingLanguages()->syncWithPivotValues($request->input('programmingLanguages', []), ['user_id' => auth()->id()]);
        $project->participatingCompanies()->syncWithPivotValues($request->input('participatingCompanies', []), ['user_id' => auth()->id()]);
        Mail::send(new SendMailUser($project));
        return new ProjectResource($project);
    }

SendMailUser.php -> Classe do E-mail

use App\Models\Project;

class SendMailUser extends Mailable
{
    use Queueable, SerializesModels;
    public $project;
    public $projects;
 
public function __construct(Project $project)
    {
        $this->project = $project;
    }
 
public function build()
    {

        $this->subject('[ISOS] - Project ' . $this->project->name . " It has been New/Update");

        $this->bcc('[email protected]');

        return $this->markdown('emails.projectEmail', [
            'project', $this->project
        ]);


    }
}

projectEmail.blade.php

@component('mail::panel')
@foreach ($projects as $project)
Companies Participating: {{ $projects->participatingCompanies->name }}
@endforeach
@endcomponent
Jean Silva
Manager Carlos Ferreira 09/08/2022

Você não passou para a view essa variável "$projects", por isso o erro.

Deve ficar assim:
return $this->markdown('emails.projectEmail', [
    'projects' => [...]
]);

Carlos Ferreira
Criador Jean Silva 09/08/2022

Showw, obrigado professor.

Jean Silva
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!