
Assalamualaikum, setelah sebelumnya kita membahas tentang middleware pada laravel 5, kali ini kita akan coba sedikit membahas tentang Controller yang merupakan bagian penting pada sebuah PHP Framework yang seringkali disebut dengan MVC Framework, berikut pembahasannya...
DASAR CONTROLLER
Pada MVC Framework, huruf "C" diartikan sebagai Controller, berdasarkan fakta bahwa controller merupakan bagian yang menghandle trafik dan fungsi fungsi antara model dan view yang disajikan kepada user.
MEMBUAT CONTROLLER
Laravel Merupakan salah satu framework yang amat memudahkan developernya dalam mengembangkan system, salahsatu buktinya yaitu kemudahan yang diberikan bagi developer untuk membuat Controller secara instant melalu perintah artisan pada terminal/cmd, berikut perintahnya
php artisan make:controller <controller-name>jangan lupa untuk mengganti <controller-name> dengan nama controller yang kita buat, controller yang kita buat akan terbentuk pada direktory app/Http/Controllers. controller yang kita buat dapat dipanggil melalui route.php dengan scrypt berikut
Route::get(‘<URI APP>’,’controller@method’);Contoh :
Dalam contoh ini kita akan coba membuat sebuah controller dengan nama UserController.
1. Jalankan Perintah Artisan Untuk Create Controller
php artisan make:controller UserController2. Outpu dari perintah tersebut seperti berikut
3. Controler terbentuk pada direktory app/Http/Controller dengan nama UserContoller.
berikut basic coding yang sudah tersedia pada controller yang baru saja kita buat tersebut
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
//
}
CONTROLLER MIDDLEWARE
Kita seringkali melihat pada artikel artikel sebelumnya, bahwa middleware dapat digunakan bersama dengan controller. middleware juga dapat diterapkan pada route controller atau dengan constructor pada controller. kita dapat menggunakan methode pada middleware untuk menerapkannya pada controller. middleware yang teregister juga dapat dibatasi dengan methode tertentu pada controller.
Assigning Middleware to Route
Berikut contoh penerapan auth middleware yang diterapkan pada method showProfile pada UserController.
Route::get('profile', [Assigning Middleware within Controller’s constructor
'middleware' => 'auth',
'uses' => 'UserController@showProfile'
]);
Lainhalnya ketika kita menerapkan middleware pada construktor controller, yang berefek akan digunakan pada semua methode pada controller, berikut contoh penerapannya.
<?phpContoh :
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
public function __construct(){
$this->middleware('auth');
}
}
Kali ini kita akan coba membuat contoh penerapan middleware
1. Tambahkan Syntax berikut pada routes.php
<?php2. Create Middleware dengan nama FirstMiddleware melalui perintah artisan
Route::get('/usercontroller/path',[
'middleware' => 'First',
'uses' => 'UserController@showPath'
]);
php artisan make:middleware FirstMiddleware3. Tambahkan Syntax berikut pada FirtsMiddleware yang baru saja kita buat
<?php4. Buat middleware baru lainnya dengan nama SecondMiddleware
namespace App\Http\Middleware;
use Closure;
class FirstMiddleware
{
public function handle($request, Closure $next)
{
echo '<br>First Middleware';
return $next($request);
}
}
php artisan make:middleware FirstMiddleware5. Tambahkan syntax berikut pada SecondMiddleware
<?php6, Create Controller dengan nama UserController, atau pergunakan UserController yang sudah dibuat sebelumnya
namespace App\Http\Middleware;
use Closure;
class SecondMiddleware
{
public function handle($request, Closure $next)
{
echo '<br>Second Middleware';
return $next($request);
}
}
7. Tambahkan Code Berikut pada UserController
<?php8. Jalankan aplikasi dengan perintah berikut
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
public function __construct(){
$this->middleware('Second');
}
public function showPath(Request $request){
$uri = $request->path();
echo '<br>URI: '.$uri;
$url = $request->url();
echo '<br>';
echo 'URL: '.$url;
$method = $request->method();
echo '<br>';
echo 'Method: '.$method;
}
}
php artisan serve9. Buka Url berikut pada browser
http://localhost:8000/usercontroller/path10. Output aplikasi pada browser
Seringkali dalam pembuatan aplikasi web kita membutuhkan operasi CRUD(Create, Read, Update, Delete). laravel menjadikan ini lebih mudah bagi kita. hanya mengcreate controller dan laravel secara otomatis akan menggenerate semua methode yang berhubungan dengan operasi CRUD, kita juga dapat meregister route tunggal untuk semua methode pada file routes.php
Contoh :
1. Create Controller MyController dengan perintah artisan seperti biasa
php artisan make:controller MyController2. Tambahkan kode berikut pada controller tersebut
<?php3. Tambahkan Syntax berikut pada routes.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class MyController extends Controller
{
public function index()
{
echo 'index';
}
public function create()
{
echo 'create';
}
public function store(Request $request)
{
echo 'store';
}
public function show($id)
{
echo 'show';
}
public function edit($id)
{
echo 'edit';
}
public function update(Request $request, $id)
{
echo 'update';
}
public function destroy($id)
{
echo 'destroy';
}
}
Route::resource('my','MyController');4. Sekarang kita meregister semua methode pada MyController dengan reseource berikut :
Verb Path Action Route NameGET /my index my.index5. Lakukan Percobaan untuk mengeksekusi URL berikut pada browser
GET /my/create create my.create
POST /my store my.store
GET /my/{my} show my.show
GET /my/{my}/edit edit my.edit
PUT/PATCH /my/{my} update my.update
DELETE /my/{my} destroy my.destroy
URL Description Output
http://localhost:8000/my Executes index method of MyController.php Index
http://localhost:8000/my/create Executes create method of MyController.php create
http://localhost:8000/my/1 Executes show method of MyController.php show
http://localhost:8000/my/1/edit Executes edit method of MyController.php edit
IMPLICIT CONTROLLER
Implicit controller memperbolehkan kita untuk mendefinisikan route tunggal untuk menghandle setiap aksi/methode pada controller. Kita dapat mendefinisikannya pada file routes.php dengan methode Route:controller seperti berikut :
Route::controller(‘base URI’,’<class-name-of-the-controller>’);jangan lupa mengganti <class-name-of-the-controller> dengan nama class yang kita buat pada controller.
Nama methode pada controller harus diawali dengan HTTP Verb seperti get atau post. Jika kita mengawalinya dengan get, ia hanya akan menghandle request dengan get type request, tapi jika kita mengawalinya dengan post, maka ia hanya akan menerima request dengan type post saja.
CONSTRUCTOR INJECTION
Service container pada laravel dapat digunakan sebagai resolve dari seluruh controller laravel. Sebagai hasil, kita dapat melakukan type-hint pada setiap dependencies pada controller kita, yang sekiranya membutuhkan constructor tersebut. Dependencies akan secara otomatis diresolve dan diinject pada controller yang menginstancenya.
Contoh :
1. Tambahkan baris kode berikut pada routes.php
class MyClass{2. tambahkan baris kode berikut pada ImplicitController,php (Jika belum ada buat terlebih dahulu)
public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
<?php3.Buka URL berikut
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller
{
private $myclass;
public function __construct(\MyClass $myclass){
$this->myclass = $myclass;
}
public function index(){
dd($this->myclass);
}
}
http://localhost:8000/myclasssetelah sebelumnya mengeksekusi perintah php artisan serve
4. Output yang dihasilkan sebagai berikut
METHOD INJECTION
Bagian akhir dari artikel ini pada pembahasan tentang controller akan kita tutup dengan pembahasan Method Injection.
Pada penambahan constructor injection, kita juga dapat menuliskan - hint dependencies pada methode action controller kita.
Contoh
1. Tambahkan baris kode berikut pada file routes.php
class MyClass{2. Tambahkan baris kode berikut pada ImplicitController.php
public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
<?php3. Eksekusi URL berikut pada browser
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller
{
public function index(\MyClass $myclass){
dd($myclass);
}
}
http://localhost:8000/myclass
4. Output yang dihasilkan adalah
Sekian pembahasan kita tentang Controller pada laravel 5, ini hanya sebagai dasar, untuk pengembangan lebih lanjut, silahkan sobat semua explorasi lebih jauh sesuai dengan aplikasi yang akan dibuat.
Happy Coding, Semangka Hangat...
No comments:
Post a Comment