
Introduction
Controller pada lumen adalah sebuah class yang berfungsi sebagai behavior atau logic yang menghandle setiap request dari routes/web.php yang telah dibuat. Semua class controllers pada framework lumen terletak di directory app/Http/Controllers.
Basic Controllers
Semuah class controllers pada framework lumen adalah extends dari class Controller. Berikut contoh sederhana bagaimana mebuat sebuah class controllers buat sebuah class ExampleController pada directory project app/Http/Controllers. cara install atau menbuat project awal lumen bisa mengikuti tutorial lumen sebelumnya
<?php
namespace App\Http\Controllers;
class ExampleController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
public function index(){
return "Hello World";
}
}
Setelah kita membuat class controller maka selanjutnya agar controller yang telah kita buat, tambahkan atau buat route controller pada file app/routes/web.php
$router->get('/example', 'ExampleController@index');
Pada script di atas kita mebuat sebuah route dengan nama /example dan methode GET yang melakukan callback pada class ExampleController dengan nama function index. Setelah itu jalankan aplikasi dan kemudian akses service yang kita buat dengan cara jalankan apliaksi lumen dengan mengetik perintah berikut :
php -S localhost:8000 -t public

Dependency Injection (DI) & Controllers
Constructor injection
Dependency Injection pada Controller yaitu melakukan injection sebuah Class pada Constructor, sehingga Class atau dependency yang kita inject secara otomatis akan dibuatkan instance ketika Class controller dieksekusi, berikut contoh Dependency Injection pada Controller :
<?php
namespace App\Http\Controllers;
use App\Services\UserService;
class UserController
{
protected $userService;
public function __construct(UserService $userService)
{
$this->userService = $userService;
}
/**
* @param $name
* @return mixed
*/
public function getMyName($name){
return $this->userService->getName($name);
}
}
Pada contoh script di atas kita melakukan injection pada contructor yaitu dengan memasukan class UserService dan memanggil method getName pada body function/method yang kita buat.
Method Injection
Selain pada construstor kita juga bisa membuat Dependency Injection pada sebuah method, contoh seperti berikut :
<?php
namespace App\Services;
use http\Client\Request;
class UserService
{
/**
* @param $name
* @return mixed
*/
public function getName(Request $request){
return 'My Name is :' .$request->name;
}
}
Pada contoh script di atas kita melakukan injection pada function/method getName yaitu dengan memasukan class Request dan mengambil nilai $request->name pada body function/method yang kita buat.
Source code tutorial lumen bisa di download di github alfazalea/lumen-tutorial
References :