View & Respon

Respon Dasar

Return String Dari Route

Route::get('/', function()
{
 return 'Hello World';
});

Membuat Respon

Sebuah instan Response diturunkan dr class Symfony\Component\HttpFoundation\Response, menyediakan berbagai perintah untuk membuat HTTP response.

$response = Response::make($contents, $statusCode);

$response->header('Content-Type', $value);

return $response;

Jika Anda ingin mengakses perintah pada class Response, tapi tetap ingin return sebuah view sebagai kontennya, Anda bisa menggunakan perintah Response::view agar lebih nyaman:

return Response::view('hello')->header('Content-Type', $type);

Melampirkan Cookie ke Respon

$cookie = Cookie::make('name', 'value');

return Response::make($content)->withCookie($cookie);

Redirect

Return Perintah Redirect

return Redirect::to('user/login');

Return Perintah Redirect Dengan Flash Data

return Redirect::to('user/login')->with('message', 'Login Failed');

Note: Karena perintah flash data akan tersimpan ke session, Anda dapat mengaksesnya kembali datanya menggunakan perintah Session::get.

Return Perintah Redirect Ke Suatu Nama Route

return Redirect::route('login');

Return Perintah Redirect Ke Suatu Nama Route dgn Parameter

return Redirect::route('profile', array(1));

Return Perintah Redirect Ke Suatu Nama Route dgn Parameter dgn Nama Tertentu

return Redirect::route('profile', array('user' => 1));

Return Perintah Redirect Ke Sebuah Action di Controller

return Redirect::action('HomeController@index');

Return Perintah Redirect Ke Sebuah Action di Controller dgn Parameter

return Redirect::action('UserController@profile', array(1));

Return Perintah Redirect Ke Sebuah Action di Controller dgn Parameter dgn Nama Tertentu

return Redirect::action('UserController@profile', array('user' => 1));

View

View umumnya berisi HTML dr aplikasi Anda dan menyediakan jalan yg nyaman dgn memisahkan controller dan logika domain dr logika tampilan (presentasi). View disimpan pada direktori app/views.

Sebuah View sederhana bentuknya sepertin ini:

<!-- View stored in app/views/greeting.php -->

<html>
 <body>
 <h1>Hello, <?php echo $name; ?></h1>
 </body>
</html>

Untuk menampilkan (return) view ke browser:

Route::get('/', function()
{
 return View::make('greeting', array('name' => 'Taylor'));
});

Argumen kedua yg diberikan ke perintah View::make adalah data array yg disediakan untuk view.

Memberkan Data Ke View

// menggunakan cara dasar
$view = View::make('greeting')->with('name', 'Steve');

// Menggunakan perintah ajaib 😀
$view = View::make('greeting')->withName('steve');

Pada contoh diatas variabel $name akan bisa diakses melalui view, dan akan berisi Steve.

Jika Anda mau, Anda bisa memberikan array data sebagai parameter kedua pada perintah make :

$view = View::make('greetings', $data);

Anda jg bisa berbagi data ke seluruh view:

View::share('name', 'Steve');

Memberikan Sebuah Sub-View Ke View Lainnya

Kadangkala Anda perlu memberikan sebuah view ke view lainnya. Misalkan, sebuah sub-view yg tersimpan sbg app/views/child/view.php, dapat diberkan ke view lainnya sbb:

$view = View::make('greeting')->nest('child', 'child.view');

$view = View::make('greeting')->nest('child', 'child.view', $data);

Sub-view tsb dapat ditampilkan dr view induknya:

<html>
 <body>
 <h1>Hello!</h1>
 <?php echo $child; ?>
 </body>
</html>

View Composer

View composer adalah callbacks atau perintah yg dipanggil ketika sebuah view ditampilkan. Jika Anda memiliki data yg terikat, selalu dibutuhkan pada suatu view setiap kali ditampilkan melalui aplikasi, iew composer dpt mengorganisir kode tsb pada satu lokasi. Oleh karena itu view composer dpt berfungsi spt “model view” atau “presenter”.

Mendefinisikan View Composer

View::composer('profile', function($view)
{
 $view->with('count', User::count());
});

Sekarang tiap kali view profile ditampilkan, data dr perintah count akan terikat & selalu ditampilkan bersama view tsb.

Anda jg bisa menempatkan view composer ke beberapa view sekaligus:

View::composer(array('profile','dashboard'), function($view)
{
 $view->with('count', User::count());
});

Jika ingin composer berbasis class, dimana akan menyediakan keuntungan karena bisa diolah melalui proses IoC Container, caranya:

View::composer('profile', 'ProfileComposer');

Composer view class berisi kode berikut:

class ProfileComposer {

 public function compose($view)
 {
 $view->with('count', User::count());
 }

}

Mendefinisikan Multiple Composer

Anda bisa menggunakan perintah composers untuk meregistrasikan sekelompok/grup composer pada waktu yg sama:

View::composers(array(
 'AdminComposer' => array('admin.index', 'admin.profile'),
 'UserComposer' => 'user',
));

Note: Tak ada keharusan dimana file class composer disimpan. Anda bebas menyimpannya dimanapun selama bisa autoloaded menggunakan arahan file composer.json.

View Creator

View creator bekerja hampir mirip dgn view composers; bedanya, akan dieksekusi begitu sebuah view di inisiasikan. Untuk meregistrasikan view creator, gunakan perintah creator:

View::creator('profile', function($view)
{
 $view->with('count', User::count());
});

Respon Spesial

Membuat Respon JSON

return Response::json(array('name' => 'Steve', 'state' => 'CA'));

Membuat Respon JSONP

return Response::json(array('name' => 'Steve', 'state' => 'CA'))->setCallback(Input::get('callback'));

Membuat Respon Download File

return Response::download($pathToFile);

return Response::download($pathToFile, $name, $headers);

Note: Symfony HttpFoundation, yg mengatur file download, mengharuskan file yg di-download tsb dinamai berdasarkan ASCII.

Respon Macro

Jika ingin mendefinisikan respon kostum yg dapat digunakan berulang kali pada beberapa route & controller, Anda bisa menggunakan perintah Response::macro:

Response::macro('caps', function($value)
{
 return Response::make(strtoupper($value));
});

Function macro menerima sebuah nama pada argumen pertama, dan sebuah closure/fungsi tertutup pada argumen kedua. Fungsi/closure tsb akan dieksekusi ketika memanggil nama macro pada class Response:

return Response::caps('foo');

Anda bisa membuat macro pada salah satu file yg ada di app/star. Cra alternatif, Anda bisa mengatur macro menjadi beberapa file yg dapat dimasukan pada salah satu file start.