Sekedar berbagi, ini style ngoding di Laravel
.
Sebenernya nggak selalu begini, kalo lagi buru-buru ya reflek sejadinya aja.
Tapi ya beginilah versi yang menurut gw 'rapih'. :p
Kenapa gw nulis beginian? supaya kalo gw kolaborasi sama orang lain main Laravel dan mereka belum 'menjelaskan' standar style ngoding mereka, gw tinggal ngasih standar style ngoding gw. Jadi mereka yang ngikutin style gw, bukan gw ngikutin style mereka... :p
Tapi tenang aja, gw yakin style ngoding gw ini cukup bagus dan rapih kok..
Controller 'rapih' versi gw tuh begini:
- Semua method HARUS ada deskripsinya, letaknya di paling atas
DocComment
. - Method yang mewakili
action
dari route, gw kasihDocComment
@route [METHOD] [PATH]
. Biar nggak bolak balik file routes, dan biar gw tau kalo method ituaction
dari route. - Kalo route itu punya
name
atauas
, gw kasihDocComment
@name [ROUTE NAME]
. Sama, biar nggak bolak-balik file routes. - Kalo route itu punya parameter condition, di
@param
taruh regexnya. Biar nggak bolak-balik file routes juga. - Method yang berfungsi untuk menampilkan halaman, prefix(awalan) nama methodnya itu
page
. MisalpageAbout
,pageDetailProduct
, dsb. Kadang pakai prefixform
untuk mengindikasikan kalau action dari route itu ngirim halaman web berupa form. Yang ini biar orang frontend tau kalo route itu nge-return halaman web tanpa mesti liat fileController
yang memusingkan (cukup dari file routes). Liat juga bagianRouting
, alasan gw point 2. - Method yang berfungsi untuk mengirim JSON, prefix methodnya itu
json
. MisaljsonDetailProduct
,jsonSearchProduct
, dsb. Yang ini juga biar orang frontend tau kalo route itu nge-return json tanpa mesti liat fileController
. - Method yang
nggak
mewakiliaction
dari route, kasih visibilityprotected
, kecuali itustatic
method dimana ada yang gunain method itu di luarclass
. - Selebihnya liat PSR-2
Model 'rapih' versi gw tuh begini:
- Usahain PSR-2.
- Method dikelompokin (pake
DocComment
, tapi pake '|', bukan '*', biar highlightnya beda di editor :v), biasanya jadi 4 bagian:MODEL HELPERS
: Isinya method-method yang akan digunain sebagai helper(penyederhana lah) dariobject
model itu.STATIC HELPERS
: Sama kayak model helpers, cuma method-method inistatic
.QUERY SCOPES
: Ini isinya method-methodscope
.MODEL RELATIONS
: Ini isinya method-method yang ngehubungin ke model lain.ATTRIBUTE ACCESSORS
: Ini jarang, isinya method-methodaccessors
.ATTRIBUTE MUTATORS
: Jarang juga, isinya method-methodmutators
.- Selebihnya bisa kelompok
PROTECTED
,PRIVATE
, dsb sesuai kebutuhan.
Beberapa web developer anti-Laravel ada yg berpendapat males pake Laravel karena males ngedaftarin routes secara manual.
Tapi gw pribadi nganggep Routing itu emang seharusnya begitu, gw pun sangat menyarankan yang biasa pake CI untuk ngedaftarin routesnya di config/routes.php
, dan ini alesan (pribadi gw):
- Gw nganggep routing itu jembatan antara backend developer dan frontend developer. Jadi kalo orang frontend mau liat-liat path dari Route untuk keperluan AJAX (misal), mereka cukup liat file
routes.php
, mereka nggak perlu ngubek2 sourceController
. Karena itu bukan areanya mereka. - Kita bisa dapet 'gambaran' keseluruhan aplikasi kita cukup dari file
routes.php
. Kalo suatu saat maintenance kita lupa aplikasi kita isinya apaan aja, kita nggak perlu ngubek2 source file-file controller. Kalo aplikasi kecil2an sih gpp, tapi kalo aplikasi mulai kompleks, ngubek2 file controller? males~ - Kalo yg ini bukan alesan kenapa routing mesti manual sih, tapi gw suka Routing ala Laravel, lumen, slim, dsb itu mereka bisa grouping, apalagi ada
middleware
. Ini bikin route jadi lebih mudah di organisir.
Jadi berdasarkan alasan2 itu, untuk routing gw lebih suka begini:
- Sebisa mungkin, saat production nggak ada
Route::resource
atauRoute::controller
. Liat alasan gw point 1 dan 2. - Route di group berdasarkan module. Biasanya gw gunain
Route::group
itu untuk grouping module, jadi group itu punya prefix module itu, misal moduleartikel
, punya'prefix' => 'artikel'
. Kalo di modul admin ada submodul artikel, ya group artikel ada di dalam group admin (nested group: admin > artikel). - Semua route punya nama (
as
). Ini biar kalo suatu saat client protes "ini url(path)nya bisa di ganti nggak? kurang enak dibacanya soalnya...", sementarapath
dari route itu kita pake di 10 file (misal untuk keperluan link, form action, dsb). Kalo kasusnya begitu kita mesti ubek2 dan edit 1-1 tuh file. Sementara kalo route dikasih nama, kita cukup ubahpath
dari route itu, untuk url di form action, link, dsb pakai fungsiroute('nama_route')
. Jadi nanti kalo diubahpath
routenya, otomatis mereka nyesuain. - Route nggak perlu dikasih
DocComment
kayak method di Controller. Kasih 1-2 baris sih gpp, kalo kebanyakan nanti malah ribet bacanya. Kalo di method controller dikasihDocComment
cukup banyak karena controller isinya business logic (baca: kodingnya ribet disana). Tapi kalo di file routes kan isinya cuma ngedaftarin routes. Kalo dikasih komentar berlebihan di setiap route malah ngeribetin komentarnya. Lagipula di style controller gw, gw ngasih prefixpage
,form
,json
,post
, dsb. Jadi bagianaction
atauuses
di route udah cukup menjelaskan Route itu tujuannya apa. - Kalo group isinya routenya banyak, di penutup group kasih baris komentar.
- Path dari route selalu diawalin
/
dan jangan diakhirin dengan/
. Misal/
(untuk index),/article
,/u/{username}
, dsb. Soalnya ada beberapa framework yg ngeharusin path diawalin/
(misal Slim), jadi biar kalo gw gunain framework lain, gw udah terbiasa, nggak mesti nambah2adapt list
lagi :p