Cara Menggunakan Laravel Facades
Facade menyediakan antarmuka "statis" ke kelas yang tersedia di wadah layanan aplikasi. Laravel dikirimkan dengan banyak fasad yang menyediakan akses ke hampir semua fitur Laravel. Fasad Laravel berfungsi sebagai "proksi statis" untuk kelas dasar dalam wadah layanan, memberikan manfaat sintaksis yang singkat dan ekspresif sambil mempertahankan lebih banyak testabilitas dan fleksibilitas daripada metode statis tradisional.
Pengantar
Facade adalah sebuah fitur dari Laravel yang mengimplementasikan pola fasad. Pada pola fasad, terdapat sebuah kelas yang disebut fasad class yang akan mengakses kelas lain. Pengguna kelas (klien) tidak akan mengakses kelas yang di-‘fasad’ secara langsung melainkan mengaksesnya melalui kelas fasad. Tujuan dari pattern ini adalah untuk menyembunyikan kerumitan.
Facade diimplementasikan dalam bentuk sebuah kelas dengan metode statis yang bila dipanggil akan memanggil metode di objek lain yang di-‘fasad’ olehnya. Sebagai contoh fasad Log::debug()
akan memanggil method debug()
dari sebuah objek Monolog\Logger
di Laravel Container. Dalam hal ini, fasad dapat dianggap sebagai cara singkat dalam mengakses sebuah objek di container.
Bagaiman Cara Penggunaannya?
Langkah 1:
Buat kelas MyFacade.php
di App\Helpers
.
class MyHelper
{
public function hello()
{
return 'Hello World!!';
}
}
Langkah 2:
Mengikat kelas ke Penyedia Layanan.
php artisan make:provider MyHelperServiceProvider
Langkah 3:
Tambahkan kode dalam metode register
.
$this->app->bind('myhelper',function(){
return new MyHelper();
});
Langkah 4:
Daftarkan penyedia layanan di config\app.php
sebagai penyedia.
App\Providers\MyHelperServiceProvider::class,
Langkah 5:
Buat file MyFacade
di App\Facades
use Illuminate\Support\Facades\Facade;class MyFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'myhelper';
}
}
Langkah 6:
Daftarkan kelas di config\app.php
sebagai alias.
'MyHelper' => App\Facades\MyFacade::class
Langkah 7:
Pengujian.
Route::get('/myfacade', function () {
return My::hello();
});
<?php
return [
/*
|--------------------------------------------------------------------------
| Application Name
|--------------------------------------------------------------------------
|
| This value is the name of your application. This value is used when the
| framework needs to place the application's name in a notification or
| any other location as required by the application or its packages.
|
*/
'name' => env('APP_NAME', 'Laravel'),
/*
|--------------------------------------------------------------------------
| Application Environment
|--------------------------------------------------------------------------
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
| services the application utilizes. Set this in your ".env" file.
|
*/
'env' => env('APP_ENV', 'production'),
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => env('APP_URL', 'http://localhost'),
'asset_url' => env('ASSET_URL', null),
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'UTC',
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
/*
|--------------------------------------------------------------------------
| Faker Locale
|--------------------------------------------------------------------------
|
| This locale will be used by the Faker PHP library when generating fake
| data for your database seeds. For example, this will be used to get
| localized telephone numbers, street address information and more.
|
*/
'faker_locale' => 'en_US',
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is used by the Illuminate encrypter service and should be set
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
// custom facade
App\Providers\MyHelperServiceProvider::class,
],
/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| This array of class aliases will be registered when this application
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/
'aliases' => [
// custom facade
'MyHelper' => App\Facades\MyFacade::class
],
];
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class MyFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'myhelper';
}
}
<?php
namespace App\Helpers;
class MyHelper
{
public function hello()
{
return 'Hello World!!';
}
}
<?php
namespace App\Providers;
use App\Helpers\MyHelper;
use Illuminate\Support\ServiceProvider;
class MyHelperServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->bind('myhelper', function () {
return new MyHelper();
});
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
// testing custom Facade
Route::get('/myfacade', function () {
return MyHelper::hello();
});