- Düzenlendi
Ben olsam ( Event/Listener veya Observer ) ve notification kullanarak sms veya mail gönderimi yapardım.
Ben olsam ( Event/Listener veya Observer ) ve notification kullanarak sms veya mail gönderimi yapardım.
@coder2 Hocam hiç birisini bilmiyorum eposta için bir template sistemi yaptım şablonları veritabanında tutuyorum model dosyamın içindende parse ediyorum gönderimide bir interface yaptım onunla yapıyorum ve veritabanına yine bu interface içerisinden logluyorum bu söylediklerinize bakayım ama event dediğiniz bir hook gibi bir şey mi?
Leon https://laravel.com/docs/8.x/events
Event ile belirttiğimiz bir olay tetiklendiğinde onu yakalayarak ne veya neler yapılacağını belirliyoruz. Dökümantasyondan ilerlerseniz daha anlaşılır olacaktır.
Hocam tekrar merhabalar, Event konusuna baktım ve uyguladım, sormak istediğim
event(new UserRegisteredEvent($user));
Şeklinde Controller içerisinde kayıt işleminden sonra eklediğim kodda SMS ve E-posta gönderimini yapan sınıflarımı çalıştırmış oldu. Peki bu sınıflardan birisi içerisinde hata alırsam bu hata mesajını nasıl alıp ekrana basabilirim?
Bir de aklıma takılan sürekli sormak istediğim bir konu var bir arayüzü service provider üzerinde bind ettiğimizde bunu aşağıdaki gibi çağırmak mı doğru
protected $GondericiContract;
public function __construct(GondericiContract $GondericiContract)
{
$this->GondericiContract = $GondericiContract;
}
Yoksa controller içerisinde sadece bu arayüzün kullanıldığı metoda mı tanımlanmalı?
public function gonder(Request $request, GondericiContract $GondericiContract) : string {
//.....
}
@mgsmus Hocam aslında soruyu soramadığımı fark ettim. Constructor içerisine enjekte ettiğimizde bu Controller her çağırıldığında bu enjekte oluyor. Bu performansı etkiler mi? Yoksa biz bunu sadece Controller içerisinde kullanacağımız örnek veriyorum tek bir metod var ise o zaman sadece o tek metodamı enjekte etmeliyiz.
Kuyruğa eklediğimiz bir iş nasıl çalışıyor kendi kendine mi?
php artisan queue:work komutu ile mi çalıştırmak gerekiyor?
Bu komutu SSH üzerinde mi yürütmek gerekiyor?
Eğer öyle ise dakikada bir çalışacak ssh cronu eklemek yeterli olur mu? * * * * * cd /public_html && php artisan queue:work --stop-when-empty >> /dev/null 2>&1
Eğer hiç birisi ise bir route oluşturup örnek www.mahmut.com/cron_kuyruk bu sayfayı cron ile ziyaret etsem ve içerisinde tanımlayacağım kuyruk çalıştırma fonksiyonu tetiklense?
Bu arada @coder2 @sineld @mgsmus gerçekten çok teşekkür ederim.
mgsmus Event kuyrukta işlem yapıyorsa hataları loglayarak alabilirsiniz. Kuyrukta yapmıyorsa ateşlediğiniz yerde hata verir.
Hocam örneğin bir eventım var ama bu event ile çalışan ikitane listenerim var. Eventı ateşiledim
$sonuc = event(new UserRegisteredEvent($user));
birinci listener çalıştı sorun var ikinci listener çalışıyor mu yada çalışıyor ise ikisininde farklı bir hatayı nasıl alabiliyorum. Yoksa tek bir listener içerisinde aşağıdaki gibi mi olmalı?
public function handle(KullaniciKayitOldu $event, SmsGateWay $sms, EpostaGateWay $eposta)
{
$errors = [];
$mesajim = [];
if(config('ayar.dogrulama.durum.deger') == 1){
if(config('ayar.dogrulama.d_sms.deger') == 1){
$sms_sonuc = $sms->kullanici($event->kullanici)->sablon('kullanici-dogrulama')->gonder();
if($sms_sonuc->durum){
$mesajim[] = ['m' => $sms_sonuc->m,'m_type' => $sms_sonuc->m_type];
}else{
$errors[] = [$sms_sonuc->m];
}
}
if(config('ayar.dogrulama.d_smtp.deger') == 1){
$eposta_sonuc = $eposta->kullanici($event->kullanici)->sablon('kullanici-dogrulama')->gonder();
if($eposta_sonuc->durum){
$mesajim[] = ['m' => $eposta_sonuc->m,'m_type' => $eposta_sonuc->m_type];
}else{
$errors[] = [$eposta_sonuc->m];
}
}
return [$mesajim, $errors];
}
Hocam birde forumda en iyi cevap seçeneğini seçtim diyelim, kaldırıyorum sayfayı yeniden ziyaret ettiğimde en iyi cevap seçeneğinin kalkmadığını görüyorum.
@coder2 Hocam, teşekkür ederim bilgiler için ve bu bilgilerden yola çıkarak supervisor tarafı shared hosting için olabilitesi yok. bir .sh script ile aynı mantık kolayca oluşturulabilir. Fakat biraz araştırınca https://laravel.com/docs/8.x/scheduling#running-the-scheduler şuradaki shared hosting tarafında işimi görür mü?
App\Console\Kernel.php
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
//
];
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('queue:work')
->cron('* * * * * *')
->withoutOverlapping();
}
}
Evet, kararlı sürümün gelmesini bekliyorum yükseltme için.
Çok soru soruyorum ama bir event içerisinde iki tane listenerim var birisi implements ShouldQueue ile kuyruğa gönderiyor diğer listener ise direk çalışması gerekiyor. Fakat kuyruğa giden gidiyor diğer listener ise çalışmıyor. ikisinide kuyruğa gidecek şekilde ayarlarsam ikiside çalışıyor. Neden çalışmaz başka bir şey mi yapmak gerekiyor? Nereyi atlıyor olabilirim?