Lanjutan dari bagian 4
Controller
Controller adalah otak dari aplikasi yang bertugas menghandel rekues dari klien dan melakukan operasi CRUD terhadap model. Dalam Laravel, controller secara default disimpan dalam direktori /application/controllers/
. Kontroler bisa menghandel rekues HTTP biasa atau restful. Kalo rekues biasa, non-restful, semua public function yang menghandel rekues harus berawalan action_
.
class Home_Controller extends BaseController{ public action_index(){ ... } public action_login(){ ... } public action_logout(){ ... } }
Sedangkan kontroler restful bentuknya seperti contoh di bawah. Semua method diberi awalan sesuai dengan restful request yang dihandel, post_
,get_
, update_
, dsb.
class Home_Controller extends BaseController{ public $restful = true; public get_index(){ ... } public get_login(){ ... } public post_login(){ ... } public post_logout(){ ... } }
Gimana Laravel bisa tau method mana yang harus dipanggil untuk menghandel sebuah rekues? Semuanya diatur lewat mekanisme URI routing, yang didefinisikan di dalam file /application/routes.php
. Contohnya,
Route::any('/login','home@login'); Route::post('/logout','home@logout'); Route::get('/','home@index');
Dalam aplikasi Dooitkoo, ada dua routing yaitu application route dan api route. Kenapa ada dua? Saya ingin memisahkan controller yang bikin HTML view berdasarkan perubahan URL di address bar dari controller yang handel data request.
Di sisi klien (browser) Dooitkoo menggunakan JavaScript (ajax) & saya nantinya juga bikin aplikasi mobile client, yang otomatis hanya butuh akses API untuk manipulasi data, & saya ga ingin kontroler aplikasi web campur aduk sama API karena ribet development & maintenancenya. Kalo dicampur, setiap kali saya utak-atik API, saya juga harus ngetes web-controller-nya & juga sebaliknya. Tapi kalo dipisah dan web-controller-nya ga tau apa-apa tentang API controller & API controller juga ga tau web controller, saya cukup ngetes salah satunya aja.
Untuk implementasi dua route saya bikin bundle khusus untuk API. Setiap bundle mirip seperti versi mini dari application, strukturnya bisa sama persis dengan direktori /application/
, ada controllers, models, views, routes, dsb. Sebenarnya, direktori /application/
itu juga bisa disebut “main bundle”.
View
Untuk bikin view saya bisa pake plain php atau template engine bawaan Laravel bernama Blade yang terinspirasi oleh Razor Engine, sebuah template engine untuk .NET.
Untuk bikin kontroler & view, saya pakai Bob karena dengan satu perintah saya bisa bikin kontroler plus view-nya.
$ php artisan bob::build controller home login logout --blade
Perintah di atas akan menghasilkan 4 file yaitu /controllers/home.php
dan 3 buah file .blade.php
, satu untuk setiap method di kontroler, sekaligus mendaftarkan kontroler di routes.php
supaya bisa dikenali oleh aplikasi.
$ php artisan bob::build controller home login logout --blade -- Can we build it? -- (~) View home/index.blade.php (~) View home/login.blade.php (~) View home/logout.blade.php (~) Controller Home_Controller -- Yes we can! --
Blade
Blade memungkinkan saya memisahkan bagian-bagian view yang dipake berulangkali dan menyimpannya di sebuah master layout.

Master layout
Kalo saya butuh override atau menambah elemen, saya tinggal masukin elemen baru di dalam blok @section
.
Dooitkoo @section('styles') @yield_section@section('content') @yield_section@section('footer-scripts') {{HTML::script('vendor/jquery/jquery-1.9.1'.Config::get('dooitkoo.asset_suffix').'.js')}} {{HTML::script('vendor/bootstrap/js/bootstrap'.Config::get('dooitkoo.asset_suffix').'.js')}} @yield_section
//pake master layout 'home/master.blade.php' @layout('home.master') @section('styles') {{HTML::style('theme/home/css/signin.css')}} @endsection @section('content')@endsection @section('footer-scripts') @parent //tambahin skrip selain yang ada di master layout {{HTML::script('js/login'.Config::get('dooitkoo.asset_suffix').'.js')}} @endsection//login form dstLogin
Belum punya akun? Daftar sekarang
Kirim data ke View
View ga punya akses ke kontroler. Semua data dinamis, selain yang sifatnya global seperti Session
, Config
, Auth::user()
dsb, disediain oleh kontroler pada waktu view dibuat. Kalo saya ingin kirim data ke view dari kontroler, saya bisa pake with
.
//di salah satu method yg handel rekues di kontroler return View::make('home.index')->with('username','Boss'); //di home/index.blade.phpHalo, {{$username}}
//atauHalo,
Web Client
Yang penting-penting tentang server udah dicatet. Artikel selanjutnya akan membahas masalah web client.
Also in this category ...
- » Making Dooitkoo : Stupid Bug
- » Making Dooitkoo - Bagian 7 : Dashboard
- » Making Dooitkoo - Bagian 6 : The Client
- » Making Dooitkoo - Bagian 4
- » Making Dooitkoo - Bagian 3