際際滷

際際滷Share a Scribd company logo
LARAVEL 4:
EVENTS & QUEUES
Haz脹rlayan:
Arda KILIDAI
E-mail: ardakilicdagi@gmail.com
Twitter: @ardadev
GitHub: ardakilic
EVENTS (OLAYLAR)
Events (Olaylar) Nelerdir?
 束Olaylar損脹 basit巽e 束bir veya birden fazla

a帳amas脹 olan, ve de s端rekli benzer 帳ekilde
tekrarlanan i帳lemlerimiz損 gibi d端帳端nebiliriz.
Buna 旦rnek vermek gerekirse, bir 端yenin
siteye kay脹t olmas脹, ki帳iselle帳tirilmi帳 toplu eposta g旦nderimi, harici bir sunucudan veri
巽ekilip derlenmesi gibi i帳lemlerin hepsini
birer olay olarak nitelendirebiliriz.
Events (Olaylar)
Bir kii siteye kay脹t olurken arka planda u aamalar脹
ger巽ekletirdiimizi farz edelim:
 Form dorulama
 Kullan脹c脹 bilgilerini veritaban脹na kaydetme
 Aktivasyon E-postas脹 g旦nderimi (SMTP kullan脹yorsak

harici sunucu balant脹s脹)
 Kullan脹c脹y脹 bir eposta grubuna dahil etme (Mailchimp gibi
hizmetler kullan脹yorsak bir ba帳ka harici sunucu balant脹s脹)
Events (Olaylar)

Bunlar脹n Hepsi controllerda
olsa Controller metodumuz
帳unun gibi bir g旦r端n端mde
olacakt脹:
Laravel 4 - Events and Queues - 2013.12.21
Laravel 4 - Events and Queues - 2013.12.21
Events (Olaylar)

Peki bunlar脹n hepsi sizce
controller脹n g旦revi mi?
Events (Olaylar)
Events (Olaylar)
Burada her bir grubu ayr脹 bir evente almak
i帳imizi olduk巽a kolayla帳t脹racak ve kod
hiyerar帳imize d端zen getirecek. Bu ayr脹ca
ilerde bu kodlar脹 farkl脹 yerlerde yeniden
kullanmam脹z脹 salayacak.
Events (Olaylar)
Olaylar脹 autoload etmi帳 her yerde (app/filters.php ,
app/routes.php , start/global.php vs.) tan脹mlayabiliriz,
fakat benim 帳ahsi tercihim app klas旦r端 alt脹na events.php diye
bir dosya a巽脹p, i巽ine olaylar脹 tek tek tan脹mlamak. Zorunlu olmasa
da bu yol kafama en yatan yol, 巽端nk端 olaylar脹n takibini de
kolayla帳t脹r脹yor. Bunu a帳a脹daki yollar脹 izleyerek yapabiliriz:
 nce bo帳 bir app/events.php dosyas脹 olu帳turun.
 Daha sonra app/start/global.php yi a巽脹p en alt脹na

a帳a脹daki deeri ekledim:
require app_path().'/events.php';
Alternatif olarak composer.json dosyan脹z脹 a巽脹p autoload nesnesi
i巽inde files keyine (yoksa 旦nce olu帳turarak) de tan脹mlama
yapabilirsiniz.
Olaylar脹 Tan脹mlamak
Bu bahsettiimiz 束olaylar損脹 Laravel 4.xte 端stlenen s脹n脹f脹n ad脹
Event s脹n脹f脹d脹r. Bu s脹n脹f alt脹ndaki baz脹 temel metodlar ile 巽ok basit
bir 帳ekilde olaylar脹 tan脹mlayabilir ve 巽a脹rabiliriz.
Event tan脹mlamak i巽in a帳a脹daki metodu kullanabiliriz:

Event::listen(
'olayAdi',
'closureMetodVeyaS脹n脹ftanMetod'
,
$oncelik = 0
);
Olaylar脹 Tan脹mlamak
 olayAdi : Burada olaya verdiimiz bir

isim. Aras脹na . (nokta) koyarak gruplama
yap脹labilir. rnein kullan脹c脹lar ile ilgili t端m
olaylar脹 user.olayAdi gibi gruplayabilirsiniz.
Bu size wildcard kullan脹m脹n脹 getirecektir.
rnein bu sayede eer
Event::listen(user.*, ...) gibi
bir olay tan脹mlad脹ysan脹z user. le ba帳layan
t端m etkinliklerde bu olay da 巽al脹帳acakt脹r.
Olaylar脹 Tan脹mlamak
 closureMetodVeyaS脹n脹ftanMetod :

bu parametre olay tetiklenince 巽al脹帳acak
metottur. Metoda belirteceiniz
parametreler ile olaya veri de refere edip
daha dinamik bir yap脹 kazand脹rabilirsiniz.
 Priority : 巽端nc端 parametre olan
priority, metodun 旦ncelik s脹ras脹n脹 belirtir.
Farz edelim ayn脹 anda birden fazla metod
Olaylar脹 Tan脹mlamak
 Priority : 巽端nc端 parametre olan priority, opsiyonel

olup yaz脹lmas脹 zorunlu deildir. Tamsay脹 olarak tan脹t脹lmas脹
gereken bu parametre, metodun 巽al脹帳madaki 旦ncelik
s脹ras脹n脹 belirtir.
Farz edelim ayn脹 anda birden fazla olay 巽a脹rd脹k, ya da
tetiimiz wildcardlar ile birden fazla olay脹 tetikledi. Bu
durumda her 帳eyi ayn脹 anda ba帳latmak yerine i帳lemlerde
旦ncelik s脹ras脹 yaparak olas脹 sorunlar脹n 旦n端ne priority
deerini girerek ge巽ebilirsiniz.
Olaylar脹 Tetiklemek
Olaylar脹 tetiklemek i巽in Event s脹n脹f脹n脹n fire() metodunu
kullan脹yoruz. Metod 帳u 帳ekilde:

Event::fire(
olayAdi,
$opsiyonelParametre
);
姻稼艶一鉛艶姻
rnek Olay Uygulamas脹 - 1
Gelelim 旦rnek birka巽 olay haz脹rlamaya. lk 旦rnekte 旦nce bir event
tan脹mlayaca脹z, ard脹ndan da bir controller metodu 端zerinden bu
eventi tetikleyip direkt 巽脹kt脹s脹n脹 alaca脹z.
 lk olarak app/routes.php i巽inde 帳旦yle bir resource haz脹rlad脹m:

Route::get(
'olay/test1',
'SunumController@olayTest1
);
 Daha sonra app/controllers/SunumController.php

dosyas脹n脹 olu帳turdum, ve de i巽ine 帳u metodu ekledim:
rnek Olay Uygulamas脹 - 1

 Bu metotta eventin 巽al脹帳t脹脹n脹 anlamak i巽in eventin

巽脹kt脹s脹n脹 direkt metodda return ile son kullan脹c脹ya
g旦steriyoruz.
rnek Olay Uygulamas脹 - 1
 Ard脹ndan da 帳u kodlar脹 olu帳turduum app/events.php i巽ine

ekledim:
rnek Olay Uygulamas脹  1
 Ard脹ndan taray脹c脹mdan tan脹mlad脹脹m resourcea gittim:
皆看稼顎巽?
rnek Olay Uygulamas脹 - 2
 帖imdi 旦rnei biraz zenginle帳tirelim. Bu sefer 旦rnee bir

parametre g旦ndereceiz.
 Bunun i巽in 旦ncelikle yine bir resource ve metod
olu帳turdum:
 nce Resource:
rnek Olay Uygulamas脹 - 2
 帖imdi de Controller:
rnek Olay Uygulamas脹 - 2
 帖imdi de app/events.php i巽ine olay脹n kendisini

ekleyelim:
rnek Olay Uygulamas脹 - 2
 Taray脹c脹dan navige olduumuzda her 帳ey ba帳ar脹l脹 olduysa

a帳a脹daki 巽脹kt脹y脹 alaca脹z:
rnek Olay Uygulamas脹 - 2
 Burada gireceiniz parametre bir dizi, bir nesne veya

istediiniz ba帳ka bir veri olabilir. rnekte basit olmas脹
amac脹 ile statik bir metin verdim. Misal nesne girerek
kullanc脹 her login olduunda nesneden son giri帳 tarihi gibi
bir veriyi g端ncelleyebilirsiniz. Nesne i巽inde bir collection
vererek collection 端zerinde toplu i帳lem yapabilirsiniz.
B旦ylece controller脹n kendisine bindirdiiniz y端k de
azalm脹帳, ve de daha derli bir altyap脹ya sahip olursunuz.
rnek Olay Uygulamas脹 - 3
 巽端nc端 旦rnekde ufak bir farkl脹l脹k yap脹p psr-0 ile autoload

ettiim app/lib/Sunum/Olaylar.php adresindeki
basit bir s脹n脹ftan 巽al脹帳t脹raca脹m etkinlii. kinci madde ile
巽脹kt脹 neredeyse ayn脹, fakat tetiklenen metod bir s脹n脹f
alt脹ndan olacak.
 Bu 旦zellik bize farkl脹 olaylar脹 t端rlerine g旦re farkl脹 s脹n脹flarda
gruplamam脹z脹 salayacak.
 Bu yolun bir eksisi de kullan脹lan dosya say脹s脹n脹n bir adet
artm脹帳 olmas脹 (ilerde 巽旦z端m端 var ;))
rnek Olay Uygulamas脹 - 3
 app/routes.php i巽indeki resource sat脹r脹m:

Route::get('olay/test3', 'SunumController@olayTest3');
 app/controllers/SunumController.php i巽indeki route
metodum:
public function olayTest3()
{
return Event::fire('olay.test3','Arda Kilicdagi');
}
 app/events.php i巽indeki olay sat脹r脹m:
Event::listen('olay.test3', 'SunumOlaylar@tetikle');
rnek Olay Uygulamas脹 - 3
 Haz脹rlad脹脹m app/lib/Sunum/Olaylar.php dosyas脹:
rnek Olay Uygulamas脹 - 3
 Taray脹c脹 巽脹kt脹s脹:
rnek Olay Uygulamas脹 - 4
Bu uygulamada olaylar脹n bir dier 旦zellii olan abonelik
(subscribe) 旦zelliinden deinmek istiyorum. rnek 3te
fark ettiiniz 端zere olay dinleyicileri (event listener) lar脹
app/events.php 端zerinden tan脹mlam脹帳t脹k, fakat subscribe
y旦ntemi ile events.php yi kullanmadan direkt s脹n脹f
端zerinden tan脹mlayabiliriz. Bu hem olaylar脹n daha derli
olmas脹n脹, hem de daha ta帳脹nabilir kodlar olmas脹n脹 salarlar.
Bunun i巽in olaylar脹 bar脹nd脹ran s脹n脹f脹m脹za subscribe() ad脹nda
yeni bir metod eklemeliyiz. Bu subscribe metodunun i巽inde
listenerlar bar脹nacak. Bu 旦rneimizde 3. olay脹n event
listener脹n脹 abonelik 端zerinden getireceiz.
rnek Olay Uygulamas脹 - 4
 app/lib/Sunum/Olaylar.php:
rnek Olay Uygulamas脹 - 4
 Bu olaylar脹 bir yerde tan脹mlamam脹z laz脹m. Bunu autoload

eden herhangi bir dosyada yapabilirsiniz. Ben 帳ahsen bu
olaylar脹n sadece controller脹m脹zda olduunu farz ederek
bir __construct() metodu yaz脹p i巽inde yapt脹m.
public function __construct() {
Event::subscribe('SunumOlaylar');
}
 Ve de 端巽端nc端 旦rnei abonelik 端zerinden 巽a脹raca脹m脹z
i巽in app/events.php de 3. 旦rnein event listener脹n脹
yoruma d旦n端帳t端rd端m.
//Event::listen('olay.test3',
'SunumOlaylar@tetikle');
rnek Olay Uygulamas脹 - 4
 皆看稼顎巽?
rnek Olay Uygulamas脹 - 4
QUEUES (KUYRUKLAR)
Queues (Kuyruklar) Nedir?
 Queuelar脹 束uzun s端rebilecek birtak脹m ilemleri

s脹raya alma, erteleme sistemi損 gibi
d端端nebiliriz.
 rnekleyecek olursak; farz edelim 端ye
kayd脹n脹zda g旦nderdiiniz bir eposta bir SMTP
sunucuya bal脹, ve de SMTPye balan脹rken
kullan脹c脹 mail gidene kadar sitede 束y端kleniyor
kum saati損ni g旦rmek zorunda. 聴te queue
sistemi bizi burada kurtar脹yor.
Queues (Kuyruklar) Nedir?
Queue sistemini basit巽e sunucu taraf脹nda
uzun s端rebilecek i帳lemleri erteleyip bu
s端re巽te son kullan脹c脹y脹 bekletmek yerine bu
i帳lemleri 端stlenip bekleyen ve ger巽ekle帳tiren
dahili ve/veya harici sistemler gibi
d端帳端nebiliriz.
Queues (Kuyruklar)
Son kullan脹c脹ya h脹zl脹 bir site deneyimi
salamak varken arka plan hantall脹klar脹 i巽in
taray脹c脹 ba脹nda neden bekletesiniz ki?
Queues (Kuyruklar)
Laravel 4.xte 端巽 adet harici Queue servisine 巽ekirdek
destei sunulmakta. Laravel taraf脹ndan desteklenen queue
servisleri ve repolar脹:
 Beanstalkd: pda/pheanstalk
 Amazon SQS: aws/aws-sdk-php
 IronMQ: iron-io/iron_mq
 Senkron (yerel s端r端c端)
Queues (Kuyruklar)
 Se巽tiiniz repo kaynaklar脹 kurmak i巽in 旦ncelikle

composer.json dosyan脹zdaki requirements k脹sm脹na reposu
eklenip composer update komutunu 巽al脹帳t脹rmal脹s脹n脹z. Ben
sunum boyunca Iron.IO servisini kullanaca脹m. 帖u anki
composer.json da ilgili alan脹m 帳u 帳ekilde:
Queues (Kuyruklar)
 Iron IOyu kullanmam脹n baz脹 sebepleri var:
 Deneme, ve ba帳ar脹s脹z olma durumunda yeniden deneme,

ve bu aral脹kta bekleme s端resi tan脹mlamas脹
 Iron.ioya giden ve Iron.iodan gelen mesajlar脹 loglamas脹
 steklerde y端k dengeleme (load balancing) uygulamas脹
 Queueyu durdurmak ile veya tekrar eden kuyrukta
y端ksek bellek kullan脹m脹 gibi sorunlarla ura帳mak zorunda
kalmamak
Queues (Kuyruklar)
 帖imdi yapmam脹z gereken Iron.io 端zerinden bir hesap

olu帳turmak ve giri帳 yapmak. Hesap olu帳turduktan sonra
giri帳 yap脹nca bir 束proje olu帳tur損 sayfas脹 kar帳脹layacak sizi:
Queues (Kuyruklar)
 Proje olu帳turulduktan sonra size iron.io credentials butonu

alt脹nda projeniz i巽in proje IDsi veve private anahtarlar脹
verecek:
Queues (Kuyruklar)
Bu anahtarlar脹 ve hangi queue motorunun
kullan脹laca脹n脹 app/config/queue.php de
belirtmemiz laz脹m. app/config /queue.php yi
a巽脹p i巽indeki default anahtar脹n脹 iron olarak
deit帳irin, ve a帳a脹daki connections.iron keyi
alt脹nda token, proje ID si ve herhangi bir
queue ad脹n脹 (iron.io da olu帳turduunuz
queue ad脹 olmas脹 zorunl脹 deil) tan脹mlay脹n.
Laravel 4 - Events and Queues - 2013.12.21
Queues (Kuyruklar)
帖imdi ise Iron.ioya bir queuemuz olduunu 旦retmemiz
laz脹m. Bunu artisan komutlar脹ndan queue:subscribe ile
yap脹yoruz. Komut temelde iki zorunlu parametre al脹yor:
php artisan queue:subscribe queueAdi link
 queueAdi : Konfig端rasyon dosyas脹nda verdiimiz queue

ad脹.
 link: 帳lemin ba帳lamas脹 i巽in gereken tetiin nerede
olaca脹.
Queues (Kuyruklar)
Unutmay脹n!
 Eer yerel ortamda 巽al脹帳脹yorsan脹z

link alan脹 online bir production
ortam脹 olmal脹d脹r. Queue sistemi
yerel sanal hostunuza eri帳emez.
 Subscribe artisan komutu sadece

Iron MQ i巽in bir komut. Dier
queue servislerinin yollar脹 ve
komutlar脹 farkl脹 olabilir.
Queues (Kuyruklar)
php artisan queue:subscribe Laravel-Sunum
http://www.laratest.com/kuyruk/deneme
 Komutu 巽al脹帳t脹rd脹脹m脹zda 帳unun gibi bir 巽脹kt脹 alaca脹z:
Queues (Kuyruklar)
 Aboneliin Iron.io servisince al脹nd脹脹n脹 test etmek i巽in,

iron.io da proje men端s端nden MQ Sekmesine, oradan da
Queues tab脹na t脹klay脹n. Eer yeni bir deer g旦r端yorsan脹z
queue sistemine ba帳ar脹 ile bir isim kaydettik demektir.
Queues (Kuyruklar)
 帖imdi de bu queue servisinin sitemize gelip tetikleyecei

resourceu haz脹rlayal脹m. Bu resource i巽inde 旦yle bir kod
yazmal脹y脹z ki bu kod uygulama i巽inde eri帳ecei isme
atanm脹帳 bir queue yu tetiklesin. Bunun i巽in Queue
class脹n脹n marshal() metodunu kullanmal脹y脹z. Arka
planda Laravel push edilen queueun bu komut gelince
tetikleneceini kendisi ayarl脹yor.
 app/routes.php ye a帳a脹daki kodlar脹 ekledim:

Route::post('kuyruk/deneme',
'SunumController @kuyrukDeneme');
Queues (Kuyruklar)
 Ard脹ndan da

app/controllers/SunumController.php dosyama
帳u kodu ekledim:

public function kuyrukDeneme()
{
return Queue::marshal();
}
 Bu a帳amadan sonra queue olu帳turup test edebiliriz:
Queues (Kuyruklar)
 Queue tetiklemek i巽in yeni bir resource tan脹mlad脹m:

Route::get(
'kuyruk/tetik1',
'SunumController@kuyrukTetik1
');
Queues (Kuyruklar)
 Daha sonra ilgili controller metodunu olu帳turdum:
Queues (Kuyruklar)
 Daha sonra taray脹c脹mdan www.laratest.com/kuyruk/tetik1

adresine gittim. Gelen bir bo帳 sayfa idi, ama arka planda
e-posta g旦ndermekle g旦revlenmi帳 bu sayfa gayet h脹zl脹
y端klendi, ve de gelen kutuma bir e-posta d端帳t端
Queues (Kuyruklar)
 Bu s脹rada, Iron MQya bakacak olursak da, canl脹

g端ncellenen raporlamas脹nda 1 adet push queue geldiini,
ve de ba帳ar脹 ile i帳lendiini g旦receiz:
Laravel 4 - Events and Queues - 2013.12.21
Queues (Kuyruklar)
Burada s脹rayla olanlar脹 anlatmak gerekirse;
 nce taray脹c脹dan navige ederek get request yapt脹k.
 Bu get request i巽inde (kuyruk/test1) bir Queue::push()

metodu i巽inde closure bir metod ile bir e-posta g旦nderimi
kodlad脹k.
 Queue::push() tetiklendii zaman Laravel arka planda i帳i
Iron MQnun tetiine g旦re haz脹r ediyor, ve de Iron MQyu bir
nevi 束巽a脹r脹yor損.
 Daha sonra Iron MQ, /kuyruk/deneme adresine bir post
request yap脹yor. Bu requesti Queue::marshal()脹 tetikliyor.
 Tetiklenen Queue::marshal(), Queue::push()ta
tan脹mlanm脹帳 i帳i ger巽ekle帳tiriyor. Bu s端re巽 boyunca Iron MQ
i帳lemin ger巽ekle帳tirilmesini t脹pk脹 son kullan脹c脹ym脹帳 da mouse
imleci terazi olmu帳 gibi bekliyor oluyor.
Queues (Kuyruklar)
 Son kullan脹c脹 da bunlar脹n hi巽 birini

beklemedii i巽in sitede daha h脹zl脹 geziniyor,
siteyi daha verimli kullan脹yor.
Queues (Kuyruklar)
 Queue::push() metodu iki parametre al脹r:

Queue::push(closureVeyaSinif,
sinifaGidecekParametreler');
Birinci parametreye ya bir closure metod, ya da autoload
etmi帳 bir s脹n脹f veya s脹n脹f@metodad脹 girilmelidir. Metod
ad脹 girilmezse var say脹lan olarak s脹n脹ftaki fire() metodu
tetiklenir.
kinci parametre eer ki queue metodu bir s脹n脹ftan
巽ar脹ld脹ysa, o metoda parametre g旦ndermek i巽indir.
Queues (Kuyruklar)
帖imdi de bir s脹n脹ftan 巽a脹r脹p tetikleyelim s脹ralamay脹:
 nce route:

Route::get(
'kuyruk/tetik2',
'SunumController @kuyrukTetik2'
);
Queues (Kuyruklar)
 帖imdi de controller metodu:
Queues (Kuyruklar)
 帖imdi de daha 旦nceden psr-0da tan脹mlad脹脹m脹z autoload

ettiimiz Siralar s脹n脹f脹 ( app/lib/Sunum/Siralar.php ):
Queues (Kuyruklar)
 Daha sonra taray脹c脹mdan www.laratest.com/kuyruk/tetik2

adresine gittim.
 Taray脹c脹da bo帳 beyaz bir sayfa a巽脹ld脹, fakat bir yeni

epostam var uyar脹s脹 gelmi帳ti:
 Gelen kutum;
Laravel 4 - Events and Queues - 2013.12.21
Queues (Kuyruklar)
 Mail s脹n脹f脹 e-posta g旦nderimi i巽in kuyruklamada 旦zel bir

metod bar脹nd脹r脹yor.
 Mail::send(...) yerine Mail::queue(...)

yazarsan脹z ayr脹 bir class yazmadan e-postalar otomatik
olarak queue kullan脹larak g旦nderilir.
Queues (Kuyruklar)
 Eer birden fazla s脹ralaman脹z varsa ve ayn脹 parametre(ler)i

farkl脹 s脹n脹flara g旦nderecekseniz bunu her birini ayr脹 sat脹r
yazmak yerine 帳旦yle yazabilirsiniz:

Queue::bulk(array(Sinif1, Sinif2'), $data);
 Queuelar脹 misal 30 dakika ge巽 ba帳latmak istiyorsan脹z;

$neZaman = Carbon::now()->addMinutes(30);
Queue::later($neZaman, S脹n脹fVeyaClosure,
$data);
Buradaki 2. ve 3. parametre push() metodu ile ayn脹.
Queues (Kuyruklar)
 Push queue gibi bir driver deil de yerel bir sunucu

kullan脹rsan脹z kuyruklar siz durdurana kadar durmaz,
devam ederler, bu da ramin 帳i帳mesine sebep olur.
 Yerel Queuelar脹n durumunu php artisan
queue:listen komutu ile izleyebilirsiniz. Bu izleyici
ayr脹ca s脹raya yeni bir kuyruk eklendii zaman an脹nda
巽al脹帳t脹r脹r.
 Queuelar脹 durdurmak i巽in i帳lemi ger巽ekle帳tiren kodlar脹n
en alt脹na $isAdi->delete() , yeniden ba帳latmak i巽in
$isAdi->release() komutlar脹n脹 kullanabilirsiniz.
 S脹raya eklenmi帳 ilk i帳i 巽al脹帳t脹rmak i巽in php artisan
queue:work komutunu kullanabilirsiniz.
Queues (Kuyruklar)
 Laravel 4.1 ile kuyruklarda olan hatalar脹 yakalama yeni bir

旦zellik olarak geldi. Eer ki kuyruklarda bir sorun
ya帳ad脹ysan脹z bunlar脹 art脹k yakalayabilir, otomatik olarak
veri taban脹na ekleyebilir, bir handler ile bir hata olduunu
yakalay脹p ona g旦re i帳lem (misal, geli帳tirme tak脹m脹na eposta) yap脹labilir.

 nce bir hata tablosu migrasyonu kurmak laz脹m, bunu

php artisan queue:failed-table
le kurabilirsiniz.
Queues (Kuyruklar)
 Queue::failing(function($gorev, $veri) { /**/ });

kodu ile sistemde kuyruklarda bir hata olduu zaman veritaban脹na
ekleme harici 端巽端nc端 parti i帳lemlerinizi yapabilirsiniz.
 php artisan queue:failed artisan komutu size t端m kuyruk

hatalar脹n脹n d旦k端m端n端 verecektir.

 T端m kuyruk hata loglar脹n脹 temizlemek i巽in

php artisan queue:flush
Komutunu kullanabilirsiniz.
Laravel Application Development Blueprints
Laravel 4 hakk脹nda bilgi almak
ve uygulamal脹 旦rnekler
ar脹yorsan脹z 聴brahim YILMAZ ile
beraber haz脹rlad脹脹m Packt
Publishingden 巽脹kan son
kitab脹m Laravel Application
Development Blueprintsi
incelemenizi 旦neririm. Bu kitapta
10 b旦l端mde 10 farkl脹 uygulama
yaz脹p L4端n t端m 旦zelliklerinden
faydaland脹k:

http://bit.ly/laravel-kitap
SORULAR ?
TE帖EKKRLER! 
 Haz脹rlayan: Arda KILIDAI
 E-mail: ardakilicdagi@gmail.com
 Twitter: @ardadev
 GitHub: ardakilic
 http://bit.ly/laravel-kitap

More Related Content

Laravel 4 - Events and Queues - 2013.12.21

  • 1. LARAVEL 4: EVENTS & QUEUES Haz脹rlayan: Arda KILIDAI E-mail: ardakilicdagi@gmail.com Twitter: @ardadev GitHub: ardakilic
  • 3. Events (Olaylar) Nelerdir? 束Olaylar損脹 basit巽e 束bir veya birden fazla a帳amas脹 olan, ve de s端rekli benzer 帳ekilde tekrarlanan i帳lemlerimiz損 gibi d端帳端nebiliriz. Buna 旦rnek vermek gerekirse, bir 端yenin siteye kay脹t olmas脹, ki帳iselle帳tirilmi帳 toplu eposta g旦nderimi, harici bir sunucudan veri 巽ekilip derlenmesi gibi i帳lemlerin hepsini birer olay olarak nitelendirebiliriz.
  • 4. Events (Olaylar) Bir kii siteye kay脹t olurken arka planda u aamalar脹 ger巽ekletirdiimizi farz edelim: Form dorulama Kullan脹c脹 bilgilerini veritaban脹na kaydetme Aktivasyon E-postas脹 g旦nderimi (SMTP kullan脹yorsak harici sunucu balant脹s脹) Kullan脹c脹y脹 bir eposta grubuna dahil etme (Mailchimp gibi hizmetler kullan脹yorsak bir ba帳ka harici sunucu balant脹s脹)
  • 5. Events (Olaylar) Bunlar脹n Hepsi controllerda olsa Controller metodumuz 帳unun gibi bir g旦r端n端mde olacakt脹:
  • 8. Events (Olaylar) Peki bunlar脹n hepsi sizce controller脹n g旦revi mi?
  • 10. Events (Olaylar) Burada her bir grubu ayr脹 bir evente almak i帳imizi olduk巽a kolayla帳t脹racak ve kod hiyerar帳imize d端zen getirecek. Bu ayr脹ca ilerde bu kodlar脹 farkl脹 yerlerde yeniden kullanmam脹z脹 salayacak.
  • 11. Events (Olaylar) Olaylar脹 autoload etmi帳 her yerde (app/filters.php , app/routes.php , start/global.php vs.) tan脹mlayabiliriz, fakat benim 帳ahsi tercihim app klas旦r端 alt脹na events.php diye bir dosya a巽脹p, i巽ine olaylar脹 tek tek tan脹mlamak. Zorunlu olmasa da bu yol kafama en yatan yol, 巽端nk端 olaylar脹n takibini de kolayla帳t脹r脹yor. Bunu a帳a脹daki yollar脹 izleyerek yapabiliriz: nce bo帳 bir app/events.php dosyas脹 olu帳turun. Daha sonra app/start/global.php yi a巽脹p en alt脹na a帳a脹daki deeri ekledim: require app_path().'/events.php'; Alternatif olarak composer.json dosyan脹z脹 a巽脹p autoload nesnesi i巽inde files keyine (yoksa 旦nce olu帳turarak) de tan脹mlama yapabilirsiniz.
  • 12. Olaylar脹 Tan脹mlamak Bu bahsettiimiz 束olaylar損脹 Laravel 4.xte 端stlenen s脹n脹f脹n ad脹 Event s脹n脹f脹d脹r. Bu s脹n脹f alt脹ndaki baz脹 temel metodlar ile 巽ok basit bir 帳ekilde olaylar脹 tan脹mlayabilir ve 巽a脹rabiliriz. Event tan脹mlamak i巽in a帳a脹daki metodu kullanabiliriz: Event::listen( 'olayAdi', 'closureMetodVeyaS脹n脹ftanMetod' , $oncelik = 0 );
  • 13. Olaylar脹 Tan脹mlamak olayAdi : Burada olaya verdiimiz bir isim. Aras脹na . (nokta) koyarak gruplama yap脹labilir. rnein kullan脹c脹lar ile ilgili t端m olaylar脹 user.olayAdi gibi gruplayabilirsiniz. Bu size wildcard kullan脹m脹n脹 getirecektir. rnein bu sayede eer Event::listen(user.*, ...) gibi bir olay tan脹mlad脹ysan脹z user. le ba帳layan t端m etkinliklerde bu olay da 巽al脹帳acakt脹r.
  • 14. Olaylar脹 Tan脹mlamak closureMetodVeyaS脹n脹ftanMetod : bu parametre olay tetiklenince 巽al脹帳acak metottur. Metoda belirteceiniz parametreler ile olaya veri de refere edip daha dinamik bir yap脹 kazand脹rabilirsiniz. Priority : 巽端nc端 parametre olan priority, metodun 旦ncelik s脹ras脹n脹 belirtir. Farz edelim ayn脹 anda birden fazla metod
  • 15. Olaylar脹 Tan脹mlamak Priority : 巽端nc端 parametre olan priority, opsiyonel olup yaz脹lmas脹 zorunlu deildir. Tamsay脹 olarak tan脹t脹lmas脹 gereken bu parametre, metodun 巽al脹帳madaki 旦ncelik s脹ras脹n脹 belirtir. Farz edelim ayn脹 anda birden fazla olay 巽a脹rd脹k, ya da tetiimiz wildcardlar ile birden fazla olay脹 tetikledi. Bu durumda her 帳eyi ayn脹 anda ba帳latmak yerine i帳lemlerde 旦ncelik s脹ras脹 yaparak olas脹 sorunlar脹n 旦n端ne priority deerini girerek ge巽ebilirsiniz.
  • 16. Olaylar脹 Tetiklemek Olaylar脹 tetiklemek i巽in Event s脹n脹f脹n脹n fire() metodunu kullan脹yoruz. Metod 帳u 帳ekilde: Event::fire( olayAdi, $opsiyonelParametre );
  • 18. rnek Olay Uygulamas脹 - 1 Gelelim 旦rnek birka巽 olay haz脹rlamaya. lk 旦rnekte 旦nce bir event tan脹mlayaca脹z, ard脹ndan da bir controller metodu 端zerinden bu eventi tetikleyip direkt 巽脹kt脹s脹n脹 alaca脹z. lk olarak app/routes.php i巽inde 帳旦yle bir resource haz脹rlad脹m: Route::get( 'olay/test1', 'SunumController@olayTest1 ); Daha sonra app/controllers/SunumController.php dosyas脹n脹 olu帳turdum, ve de i巽ine 帳u metodu ekledim:
  • 19. rnek Olay Uygulamas脹 - 1 Bu metotta eventin 巽al脹帳t脹脹n脹 anlamak i巽in eventin 巽脹kt脹s脹n脹 direkt metodda return ile son kullan脹c脹ya g旦steriyoruz.
  • 20. rnek Olay Uygulamas脹 - 1 Ard脹ndan da 帳u kodlar脹 olu帳turduum app/events.php i巽ine ekledim:
  • 21. rnek Olay Uygulamas脹 1 Ard脹ndan taray脹c脹mdan tan脹mlad脹脹m resourcea gittim:
  • 23. rnek Olay Uygulamas脹 - 2 帖imdi 旦rnei biraz zenginle帳tirelim. Bu sefer 旦rnee bir parametre g旦ndereceiz. Bunun i巽in 旦ncelikle yine bir resource ve metod olu帳turdum: nce Resource:
  • 24. rnek Olay Uygulamas脹 - 2 帖imdi de Controller:
  • 25. rnek Olay Uygulamas脹 - 2 帖imdi de app/events.php i巽ine olay脹n kendisini ekleyelim:
  • 26. rnek Olay Uygulamas脹 - 2 Taray脹c脹dan navige olduumuzda her 帳ey ba帳ar脹l脹 olduysa a帳a脹daki 巽脹kt脹y脹 alaca脹z:
  • 27. rnek Olay Uygulamas脹 - 2 Burada gireceiniz parametre bir dizi, bir nesne veya istediiniz ba帳ka bir veri olabilir. rnekte basit olmas脹 amac脹 ile statik bir metin verdim. Misal nesne girerek kullanc脹 her login olduunda nesneden son giri帳 tarihi gibi bir veriyi g端ncelleyebilirsiniz. Nesne i巽inde bir collection vererek collection 端zerinde toplu i帳lem yapabilirsiniz. B旦ylece controller脹n kendisine bindirdiiniz y端k de azalm脹帳, ve de daha derli bir altyap脹ya sahip olursunuz.
  • 28. rnek Olay Uygulamas脹 - 3 巽端nc端 旦rnekde ufak bir farkl脹l脹k yap脹p psr-0 ile autoload ettiim app/lib/Sunum/Olaylar.php adresindeki basit bir s脹n脹ftan 巽al脹帳t脹raca脹m etkinlii. kinci madde ile 巽脹kt脹 neredeyse ayn脹, fakat tetiklenen metod bir s脹n脹f alt脹ndan olacak. Bu 旦zellik bize farkl脹 olaylar脹 t端rlerine g旦re farkl脹 s脹n脹flarda gruplamam脹z脹 salayacak. Bu yolun bir eksisi de kullan脹lan dosya say脹s脹n脹n bir adet artm脹帳 olmas脹 (ilerde 巽旦z端m端 var ;))
  • 29. rnek Olay Uygulamas脹 - 3 app/routes.php i巽indeki resource sat脹r脹m: Route::get('olay/test3', 'SunumController@olayTest3'); app/controllers/SunumController.php i巽indeki route metodum: public function olayTest3() { return Event::fire('olay.test3','Arda Kilicdagi'); } app/events.php i巽indeki olay sat脹r脹m: Event::listen('olay.test3', 'SunumOlaylar@tetikle');
  • 30. rnek Olay Uygulamas脹 - 3 Haz脹rlad脹脹m app/lib/Sunum/Olaylar.php dosyas脹:
  • 31. rnek Olay Uygulamas脹 - 3 Taray脹c脹 巽脹kt脹s脹:
  • 32. rnek Olay Uygulamas脹 - 4 Bu uygulamada olaylar脹n bir dier 旦zellii olan abonelik (subscribe) 旦zelliinden deinmek istiyorum. rnek 3te fark ettiiniz 端zere olay dinleyicileri (event listener) lar脹 app/events.php 端zerinden tan脹mlam脹帳t脹k, fakat subscribe y旦ntemi ile events.php yi kullanmadan direkt s脹n脹f 端zerinden tan脹mlayabiliriz. Bu hem olaylar脹n daha derli olmas脹n脹, hem de daha ta帳脹nabilir kodlar olmas脹n脹 salarlar. Bunun i巽in olaylar脹 bar脹nd脹ran s脹n脹f脹m脹za subscribe() ad脹nda yeni bir metod eklemeliyiz. Bu subscribe metodunun i巽inde listenerlar bar脹nacak. Bu 旦rneimizde 3. olay脹n event listener脹n脹 abonelik 端zerinden getireceiz.
  • 33. rnek Olay Uygulamas脹 - 4 app/lib/Sunum/Olaylar.php:
  • 34. rnek Olay Uygulamas脹 - 4 Bu olaylar脹 bir yerde tan脹mlamam脹z laz脹m. Bunu autoload eden herhangi bir dosyada yapabilirsiniz. Ben 帳ahsen bu olaylar脹n sadece controller脹m脹zda olduunu farz ederek bir __construct() metodu yaz脹p i巽inde yapt脹m. public function __construct() { Event::subscribe('SunumOlaylar'); } Ve de 端巽端nc端 旦rnei abonelik 端zerinden 巽a脹raca脹m脹z i巽in app/events.php de 3. 旦rnein event listener脹n脹 yoruma d旦n端帳t端rd端m. //Event::listen('olay.test3', 'SunumOlaylar@tetikle');
  • 35. rnek Olay Uygulamas脹 - 4 皆看稼顎巽?
  • 38. Queues (Kuyruklar) Nedir? Queuelar脹 束uzun s端rebilecek birtak脹m ilemleri s脹raya alma, erteleme sistemi損 gibi d端端nebiliriz. rnekleyecek olursak; farz edelim 端ye kayd脹n脹zda g旦nderdiiniz bir eposta bir SMTP sunucuya bal脹, ve de SMTPye balan脹rken kullan脹c脹 mail gidene kadar sitede 束y端kleniyor kum saati損ni g旦rmek zorunda. 聴te queue sistemi bizi burada kurtar脹yor.
  • 39. Queues (Kuyruklar) Nedir? Queue sistemini basit巽e sunucu taraf脹nda uzun s端rebilecek i帳lemleri erteleyip bu s端re巽te son kullan脹c脹y脹 bekletmek yerine bu i帳lemleri 端stlenip bekleyen ve ger巽ekle帳tiren dahili ve/veya harici sistemler gibi d端帳端nebiliriz.
  • 40. Queues (Kuyruklar) Son kullan脹c脹ya h脹zl脹 bir site deneyimi salamak varken arka plan hantall脹klar脹 i巽in taray脹c脹 ba脹nda neden bekletesiniz ki?
  • 41. Queues (Kuyruklar) Laravel 4.xte 端巽 adet harici Queue servisine 巽ekirdek destei sunulmakta. Laravel taraf脹ndan desteklenen queue servisleri ve repolar脹: Beanstalkd: pda/pheanstalk Amazon SQS: aws/aws-sdk-php IronMQ: iron-io/iron_mq Senkron (yerel s端r端c端)
  • 42. Queues (Kuyruklar) Se巽tiiniz repo kaynaklar脹 kurmak i巽in 旦ncelikle composer.json dosyan脹zdaki requirements k脹sm脹na reposu eklenip composer update komutunu 巽al脹帳t脹rmal脹s脹n脹z. Ben sunum boyunca Iron.IO servisini kullanaca脹m. 帖u anki composer.json da ilgili alan脹m 帳u 帳ekilde:
  • 43. Queues (Kuyruklar) Iron IOyu kullanmam脹n baz脹 sebepleri var: Deneme, ve ba帳ar脹s脹z olma durumunda yeniden deneme, ve bu aral脹kta bekleme s端resi tan脹mlamas脹 Iron.ioya giden ve Iron.iodan gelen mesajlar脹 loglamas脹 steklerde y端k dengeleme (load balancing) uygulamas脹 Queueyu durdurmak ile veya tekrar eden kuyrukta y端ksek bellek kullan脹m脹 gibi sorunlarla ura帳mak zorunda kalmamak
  • 44. Queues (Kuyruklar) 帖imdi yapmam脹z gereken Iron.io 端zerinden bir hesap olu帳turmak ve giri帳 yapmak. Hesap olu帳turduktan sonra giri帳 yap脹nca bir 束proje olu帳tur損 sayfas脹 kar帳脹layacak sizi:
  • 45. Queues (Kuyruklar) Proje olu帳turulduktan sonra size iron.io credentials butonu alt脹nda projeniz i巽in proje IDsi veve private anahtarlar脹 verecek:
  • 46. Queues (Kuyruklar) Bu anahtarlar脹 ve hangi queue motorunun kullan脹laca脹n脹 app/config/queue.php de belirtmemiz laz脹m. app/config /queue.php yi a巽脹p i巽indeki default anahtar脹n脹 iron olarak deit帳irin, ve a帳a脹daki connections.iron keyi alt脹nda token, proje ID si ve herhangi bir queue ad脹n脹 (iron.io da olu帳turduunuz queue ad脹 olmas脹 zorunl脹 deil) tan脹mlay脹n.
  • 48. Queues (Kuyruklar) 帖imdi ise Iron.ioya bir queuemuz olduunu 旦retmemiz laz脹m. Bunu artisan komutlar脹ndan queue:subscribe ile yap脹yoruz. Komut temelde iki zorunlu parametre al脹yor: php artisan queue:subscribe queueAdi link queueAdi : Konfig端rasyon dosyas脹nda verdiimiz queue ad脹. link: 帳lemin ba帳lamas脹 i巽in gereken tetiin nerede olaca脹.
  • 49. Queues (Kuyruklar) Unutmay脹n! Eer yerel ortamda 巽al脹帳脹yorsan脹z link alan脹 online bir production ortam脹 olmal脹d脹r. Queue sistemi yerel sanal hostunuza eri帳emez. Subscribe artisan komutu sadece Iron MQ i巽in bir komut. Dier queue servislerinin yollar脹 ve komutlar脹 farkl脹 olabilir.
  • 50. Queues (Kuyruklar) php artisan queue:subscribe Laravel-Sunum http://www.laratest.com/kuyruk/deneme Komutu 巽al脹帳t脹rd脹脹m脹zda 帳unun gibi bir 巽脹kt脹 alaca脹z:
  • 51. Queues (Kuyruklar) Aboneliin Iron.io servisince al脹nd脹脹n脹 test etmek i巽in, iron.io da proje men端s端nden MQ Sekmesine, oradan da Queues tab脹na t脹klay脹n. Eer yeni bir deer g旦r端yorsan脹z queue sistemine ba帳ar脹 ile bir isim kaydettik demektir.
  • 52. Queues (Kuyruklar) 帖imdi de bu queue servisinin sitemize gelip tetikleyecei resourceu haz脹rlayal脹m. Bu resource i巽inde 旦yle bir kod yazmal脹y脹z ki bu kod uygulama i巽inde eri帳ecei isme atanm脹帳 bir queue yu tetiklesin. Bunun i巽in Queue class脹n脹n marshal() metodunu kullanmal脹y脹z. Arka planda Laravel push edilen queueun bu komut gelince tetikleneceini kendisi ayarl脹yor. app/routes.php ye a帳a脹daki kodlar脹 ekledim: Route::post('kuyruk/deneme', 'SunumController @kuyrukDeneme');
  • 53. Queues (Kuyruklar) Ard脹ndan da app/controllers/SunumController.php dosyama 帳u kodu ekledim: public function kuyrukDeneme() { return Queue::marshal(); } Bu a帳amadan sonra queue olu帳turup test edebiliriz:
  • 54. Queues (Kuyruklar) Queue tetiklemek i巽in yeni bir resource tan脹mlad脹m: Route::get( 'kuyruk/tetik1', 'SunumController@kuyrukTetik1 ');
  • 55. Queues (Kuyruklar) Daha sonra ilgili controller metodunu olu帳turdum:
  • 56. Queues (Kuyruklar) Daha sonra taray脹c脹mdan www.laratest.com/kuyruk/tetik1 adresine gittim. Gelen bir bo帳 sayfa idi, ama arka planda e-posta g旦ndermekle g旦revlenmi帳 bu sayfa gayet h脹zl脹 y端klendi, ve de gelen kutuma bir e-posta d端帳t端
  • 57. Queues (Kuyruklar) Bu s脹rada, Iron MQya bakacak olursak da, canl脹 g端ncellenen raporlamas脹nda 1 adet push queue geldiini, ve de ba帳ar脹 ile i帳lendiini g旦receiz:
  • 59. Queues (Kuyruklar) Burada s脹rayla olanlar脹 anlatmak gerekirse; nce taray脹c脹dan navige ederek get request yapt脹k. Bu get request i巽inde (kuyruk/test1) bir Queue::push() metodu i巽inde closure bir metod ile bir e-posta g旦nderimi kodlad脹k. Queue::push() tetiklendii zaman Laravel arka planda i帳i Iron MQnun tetiine g旦re haz脹r ediyor, ve de Iron MQyu bir nevi 束巽a脹r脹yor損. Daha sonra Iron MQ, /kuyruk/deneme adresine bir post request yap脹yor. Bu requesti Queue::marshal()脹 tetikliyor. Tetiklenen Queue::marshal(), Queue::push()ta tan脹mlanm脹帳 i帳i ger巽ekle帳tiriyor. Bu s端re巽 boyunca Iron MQ i帳lemin ger巽ekle帳tirilmesini t脹pk脹 son kullan脹c脹ym脹帳 da mouse imleci terazi olmu帳 gibi bekliyor oluyor.
  • 60. Queues (Kuyruklar) Son kullan脹c脹 da bunlar脹n hi巽 birini beklemedii i巽in sitede daha h脹zl脹 geziniyor, siteyi daha verimli kullan脹yor.
  • 61. Queues (Kuyruklar) Queue::push() metodu iki parametre al脹r: Queue::push(closureVeyaSinif, sinifaGidecekParametreler'); Birinci parametreye ya bir closure metod, ya da autoload etmi帳 bir s脹n脹f veya s脹n脹f@metodad脹 girilmelidir. Metod ad脹 girilmezse var say脹lan olarak s脹n脹ftaki fire() metodu tetiklenir. kinci parametre eer ki queue metodu bir s脹n脹ftan 巽ar脹ld脹ysa, o metoda parametre g旦ndermek i巽indir.
  • 62. Queues (Kuyruklar) 帖imdi de bir s脹n脹ftan 巽a脹r脹p tetikleyelim s脹ralamay脹: nce route: Route::get( 'kuyruk/tetik2', 'SunumController @kuyrukTetik2' );
  • 63. Queues (Kuyruklar) 帖imdi de controller metodu:
  • 64. Queues (Kuyruklar) 帖imdi de daha 旦nceden psr-0da tan脹mlad脹脹m脹z autoload ettiimiz Siralar s脹n脹f脹 ( app/lib/Sunum/Siralar.php ):
  • 65. Queues (Kuyruklar) Daha sonra taray脹c脹mdan www.laratest.com/kuyruk/tetik2 adresine gittim. Taray脹c脹da bo帳 beyaz bir sayfa a巽脹ld脹, fakat bir yeni epostam var uyar脹s脹 gelmi帳ti: Gelen kutum;
  • 67. Queues (Kuyruklar) Mail s脹n脹f脹 e-posta g旦nderimi i巽in kuyruklamada 旦zel bir metod bar脹nd脹r脹yor. Mail::send(...) yerine Mail::queue(...) yazarsan脹z ayr脹 bir class yazmadan e-postalar otomatik olarak queue kullan脹larak g旦nderilir.
  • 68. Queues (Kuyruklar) Eer birden fazla s脹ralaman脹z varsa ve ayn脹 parametre(ler)i farkl脹 s脹n脹flara g旦nderecekseniz bunu her birini ayr脹 sat脹r yazmak yerine 帳旦yle yazabilirsiniz: Queue::bulk(array(Sinif1, Sinif2'), $data); Queuelar脹 misal 30 dakika ge巽 ba帳latmak istiyorsan脹z; $neZaman = Carbon::now()->addMinutes(30); Queue::later($neZaman, S脹n脹fVeyaClosure, $data); Buradaki 2. ve 3. parametre push() metodu ile ayn脹.
  • 69. Queues (Kuyruklar) Push queue gibi bir driver deil de yerel bir sunucu kullan脹rsan脹z kuyruklar siz durdurana kadar durmaz, devam ederler, bu da ramin 帳i帳mesine sebep olur. Yerel Queuelar脹n durumunu php artisan queue:listen komutu ile izleyebilirsiniz. Bu izleyici ayr脹ca s脹raya yeni bir kuyruk eklendii zaman an脹nda 巽al脹帳t脹r脹r. Queuelar脹 durdurmak i巽in i帳lemi ger巽ekle帳tiren kodlar脹n en alt脹na $isAdi->delete() , yeniden ba帳latmak i巽in $isAdi->release() komutlar脹n脹 kullanabilirsiniz. S脹raya eklenmi帳 ilk i帳i 巽al脹帳t脹rmak i巽in php artisan queue:work komutunu kullanabilirsiniz.
  • 70. Queues (Kuyruklar) Laravel 4.1 ile kuyruklarda olan hatalar脹 yakalama yeni bir 旦zellik olarak geldi. Eer ki kuyruklarda bir sorun ya帳ad脹ysan脹z bunlar脹 art脹k yakalayabilir, otomatik olarak veri taban脹na ekleyebilir, bir handler ile bir hata olduunu yakalay脹p ona g旦re i帳lem (misal, geli帳tirme tak脹m脹na eposta) yap脹labilir. nce bir hata tablosu migrasyonu kurmak laz脹m, bunu php artisan queue:failed-table le kurabilirsiniz.
  • 71. Queues (Kuyruklar) Queue::failing(function($gorev, $veri) { /**/ }); kodu ile sistemde kuyruklarda bir hata olduu zaman veritaban脹na ekleme harici 端巽端nc端 parti i帳lemlerinizi yapabilirsiniz. php artisan queue:failed artisan komutu size t端m kuyruk hatalar脹n脹n d旦k端m端n端 verecektir. T端m kuyruk hata loglar脹n脹 temizlemek i巽in php artisan queue:flush Komutunu kullanabilirsiniz.
  • 72. Laravel Application Development Blueprints Laravel 4 hakk脹nda bilgi almak ve uygulamal脹 旦rnekler ar脹yorsan脹z 聴brahim YILMAZ ile beraber haz脹rlad脹脹m Packt Publishingden 巽脹kan son kitab脹m Laravel Application Development Blueprintsi incelemenizi 旦neririm. Bu kitapta 10 b旦l端mde 10 farkl脹 uygulama yaz脹p L4端n t端m 旦zelliklerinden faydaland脹k: http://bit.ly/laravel-kitap
  • 74. TE帖EKKRLER! Haz脹rlayan: Arda KILIDAI E-mail: ardakilicdagi@gmail.com Twitter: @ardadev GitHub: ardakilic http://bit.ly/laravel-kitap