Jump to content
antonio_milat

Por que meu listener (Laravel Lumen) está sendo chamado duas vezes?

Recommended Posts

Meu listener está sendo chamado duas vezes, mas o evento só é disparado uma vez.

Eu copiei a base do código da documentação do Lumen 5.7 e aparentemente está tudo configurado corretamente. Não consigo encontrar o problema.

 

bootstrap/app.php

$app->register(App\Providers\EventServiceProvider::class);

 

app/Providers/EventServiceProvider.php

protected $listen = [
    'App\Events\NewAuthEvent' => [
        'App\Listeners\SendNewAuthListener',
    ],
];

 

app/Events/NewAuthEvent.php

use Illuminate\Queue\SerializesModels;
use App\Data\Entity\User;
use App\Data\Entity\Authorization;
use Illuminate\Support\Facades\Log;

class NewAuthEvent
{
    use SerializesModels;

    public $user;

    public $auth;

    public function __construct(User $user, Authorization $auth)
    {
        Log::debug("Disparado uma vez");
        $this->user = $user;
        $this->auth = $auth;
    }
}

 

app/Listeners/SendNewAuthListener.php

use App\Events\NewAuthEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Data\Service\MessengerService;
use Illuminate\Support\Facades\Log;

class SendNewAuthListener
{
    private $messenger;

    public function __construct(MessengerService $messenger)
    {
        Log::debug("Chamado duas vezes");
        $this->messenger = $messenger;
    }

    public function handle(NewAuthEvent $event)
    {
        Log::debug("Chamado duas vezes também");
        $this->messenger->new($event->user, $event->auth);
    }
}

 

Disparando o evento:

event(new NewAuthEvent($objUser, $objAuthorization));

Estou me esquecendo de algum parâmetro ou configuração? Agradeço desde já!

Share this post


Link to post
Share on other sites

@antonio_milat, beleza!

De olho,  não vejo nada de errado.

É bobeira, mas não custa nada perguntar, quando você diz que o listener esta chamando duas vezes, nos logs fica:

 

1.

    Disparado uma vez
    Chamado duas vezes
    Chamado duas vezes também

 

ou

 

2.

    Disparado uma vez
    Chamado duas vezes
    Chamado duas vezes também
    Chamado duas vezes
   Chamado duas vezes também

Porque no primeiro caso, estaria certo. Ele foi chamado apenas uma vez, pois o construtor sempre sera executado junto e antes do handle

Share this post


Link to post
Share on other sites

@EdCesar beleza cara?

 

Acontece o segundo caso:

    'Disparado uma vez
    Chamado duas vezes
    Chamado duas vezes também
    Chamado duas vezes
   Chamado duas vezes também'

 

Eu coloquei o log nos dois métodos (construtor e handle) porque em outro fórum me perguntaram se somente o construtor estava sendo chamado ou se o handle também estava.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By fideles
      Fala pessoal, como anda as coisas?
       
      Meu conhecimento em JS e quase neutro, conheço algo, mais talvez não o suficiente para o que eu precise, por isso venho pedir ajuda a vocês,
       
      Tenho um pequeno programinha, simples mesmo que tem 4 areas (Administração, Compras, Financeiro, Almoxarifado).
       
      Quem fica na ADM solicita algo,  compras visualiza e da um "ok" e o financeiro tbm tem que dar um "ok" e no final, o almoxarifado dá um "Processo Concluido" (está parte está ok, funcionando, sem erro)
       
      Meu problema seria que quem está no almoxarifado consegue clicar no botão "Processo Concluido" mesmo o pessoal de compras e financeiro não dando um "ok" na solicitação ou ele tbm consegue dar "Processo Concluido" se um ou outro dar um "ok". Precisaria que ele so conseguisse dar "Processo Concluido" se os dois darem o "ok", se so um dar "ok" ele não pode dar "Processo Concluido".
       
      Alguém consegue pelo menos me dar um norte para que eu possa dar continuidade? Já tentei em PHP e nada.
       
    • By samuelsennev
      Fala pessoal, beleza? 
      Então, estou tendo esse problema com o laravel 7. O que acontece é: tenho um formulário que manda alguns inputs para o método store(Request $request)--estrutura resource do laravel--, que por sua vez salva no banco de dados. Porém, a aplicação está caindo em uma página em branco antes de chegar no próprio método store. 
      O engraçado é que semana passada funcionava (inclusive salvava os registros no bd)... não fiz alterações que comprometem a rota. Simplesmente parou de funcionar. A aplicação me retorna uma página em branco.
       
      Vale lembrar:
      - A aplicação nem chega no controller;
      - Na primeira linha do método store(Request $request) tem um "dd($request);" para ver o que está chegando... ele nunca retorna a requisição na tela. Logo, presumo que o erro é na rota mesmo.
       
      A rota dentro de web.php: Route::get('/paginaPrincipal-5w2h', 'PT\PT_FiveTwoController@index')->name('index-5w'); Route::post('/salvando-5w2h', 'PT\PT_FiveTwoController@armazenar')->name('salvar-5w'); ------------------------------------------------------------------------------------------------------------------ O formulário da view: <form action="{{route('salvar-5w')}}" method="POST"> @csrf <div class="row"> <div class="col-lg-12S"> <div class="iq-card" > <div class="iq-card-header d-flex justify-content-between" style="border:none;"> <div class="row"> <div class="col-lg-6" style="padding-top: 2%; font-size: 18px;"> <label style="display: inline;">Nome: </label> </div> <div class="col-lg-6"> <input type="text" name="nome" class="form-control round" style="width: 200%;" placeholder="Seu nome..." > </div> </div> </div> </div> </div> </div> <button style="margin-left:90%; margin-bottom: 2%; padding:8px 16px ;" class="btn btn-primary">Salvar</button> </form> -----(A aplicação chega em index() tranquilamente, porém, em armazenar() não)----- O controller: namespace App\Http\Controllers\PT; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Auth; class PT_FiveTwoController extends Controller { public function index() { $user_id = Auth::id(); $data = DB::table('5w2h')->select()->where('user_id', $user_id)->get(); // dd($data); return view('tools.5w2h', ['data' => $data]); } public function armazenar(Request $request) { dd($request); } }
       
       
    • By Bruno Ferreira da Silva
      Estou utilizando laravel 5.8.
      Meu problema é o seguinte, estou realizando o login com usuário e senha. O sistema entra na condição e debuga corretamente o usuário logado. e no mesmo momento que eu altero a url para ..../dashboard, ele redireciona como se estivesse deslogando. mas na segunda tentativa isso não acontece, ele realiza o login normalmente. Ai isso se repete sempre que troca de usuário. 
       
      O controller da dashboard chama apenas a view e mais nada. 
      public function authenticate(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { dd(Auth::user()); return redirect()->intended('dashboard'); } }  
    • By Chris Martin
      Pessoal, estou com um problema com relacionamentos no laravel. (Inclusive pode ser até falta de atenção minha), mas quebrei a cabeça demais e não consegui; Tenho as tabelas 'arquiteto' e 'cliente' e um arquiteto tem vários clientes, só que não consegui fazer o relacionamento aparecer na tabela 'cliente' tenho o campo `arquiteto_id' que referencia o 'id' da tabela 'arquitetos', só que quando fiz a relação na model Arquiteto ela não está aparecendo class Arquiteto extends Model{ protected $fillable = [...]; public function clientes() { return $this->hasMany('App\Cliente'); } }  
    • By eduardo_barros
      Boa tarde,
       
      Possuo uma aplicação rodando em Laravel com Db Mysql.
       
      Porem um cliente solicitou que o nosso sistema ficasse gravando informações no banco de dados SQL deles e vice e versa, só que o sistema deles não tem API, nesse caso vamos executar as queries do banco banco deles do nosso lado lendo e escrevendo, como funciona essa multiconexão de bancos dentro do laravel?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.