Cara Membuat Laravel Helper



Hai, berjumpa lagi dengan Mata Panda Crew nih, di Artikel kali ini masih seputar Framework Laravel dan saya akan membuat tutorial "Cara Membuat Helper di Laravel", so langsung ajah ke tutorialnya ..

Sebagai permulaan, saya lebih suka membiarkan situs resmi Laravel berbicara tentang helper.

Laravel menyertakan berbagai fungsi PHP "helper" global. Banyak fungsi ini digunakan oleh framework itu sendiri namun, Anda bebas menggunakannya dalam aplikasi Anda sendiri jika Anda merasa nyaman.

Jadi, pada dasarnya, helper di Laravel adalah fungsi utilitas bawaan yang dapat Anda panggil dari manapun dalam aplikasi Anda. Jika mereka tidak disediakan core framework, Anda mungkin sudah mengembangkan helper classes Anda sendiri.

Meskipun core nya menyediakan berbagai helper, selalu ada kemungkinan Anda memerlukan milik Anda sendiri dan ingin mengembangkannya, sehingga Anda tidak perlu mengulang code yang sama di sana-sini, sehingga meningkatkan kemampuan perawatan yang lebih baik. Anda akan belajar cara membuat custom Laravel helper dalam tutorial ini.

Seperti yang telah kita bahas sebelumnya, ada banyak helper yang tersedia di core framework Laravel. Mereka dikelompokkan bersama berdasarkan fungsi yang mereka berikan. Berikut daftar grup helper.
Helper dalam grup ini menyediakan fungsionalitas untuk memanipulasi elemen array. Lebih sering daripada tidak, Anda berada dalam situasi di mana Anda ingin melakukan operasi yang berbeda pada elemen array. Jadi, ini adalah tempat di mana Anda harus melihat terlebih dahulu untuk melihat apakah yang Anda cari sudah ada.
Saya menemukan helper dalam kategori ini sangat berguna. Mereka mengembalikan path yang memenuhi syarat dari berbagai direktori seperti aplikasi, penyimpanan, konfigurasi, dan sejenisnya. Saya yakin Anda sudah menggunakan sebagian besar helper ini pada aplikasi Laravel Anda.
Manipulasi string adalah sesuatu yang tak terelakkan dalam pengembangan aplikasi sehari-hari Anda. Meskipun ada banyak fungsi manipulasi string yang disediakan oleh PHP itu sendiri, Anda akan menemukan beberapa barang yang lebih berguna di bagian ini.
Anda akan menemukan sangat sedikit kategori ini, namun penggunaannya digunakan selama aplikasi berlangsung. Mereka digunakan untuk menghasilkan rute, aset, dan form action URLs.
Kategori ini berisi helper yang menyediakan berbagai fungsi mulai dari logging hingga debugging dan banyak lagi.

Untuk referensi lengkap helper Laravel, tidak ada tempat yang lebih baik daripada dokumentasi resminya.

Sekarang Anda memiliki pemahaman dasar tentang helper Laravel dan apa tujuannya. Pada bagian ini, saya akan langsung dan menunjukkan bagaimana Anda dapat membuat custom helper Anda sendiri yang dapat digunakan secara global di aplikasi Laravel Anda.

Untuk menjaga hal-hal sederhana dan mudah dimengerti, ini akan menjadi helper yang cukup mendasar yang mengambil userid dan mengembalikan nama pengguna sebagai tanggapannya. Tentu saja, itu tidak terdengar mewah, tapi saya yakin ini cukup untuk menunjukkan konsepnya, dan Anda selalu bisa memperpanjangnya untuk memenuhi kebutuhan Anda yang kompleks.

Saya berasumsi bahwa Anda memiliki tabel users di database Anda dan setidaknya memiliki dua field—userid dan username.
Sebelum kita tutorial selanjutnya dan benar-benar membuat file-filenya, mari kita lihat sekilas file yang akan kita buat di sisa artikel.
  • app/Helpers/MataPanda/User.php: Ini file helper kita yang memegang logika helper kita.
  • app/Providers/MataPandaServiceProvider.php: Ini adalah file penyedia layanan custom yang memuat file custom helper kita.
  • config/app.php: Dalam file ini, kita akan mengumumkan penyedia layanan custom kita, dan ini juga membantu kita menentukan alias ke helper kita sehingga kita tidak perlu menggunakan class name yang memenuhi syarat dari helper kita.
  • routes/web.php: File rute Laravel yang cukup standar dimana kita benar-benar akan menguji helper kita.
Meskipun Anda bisa menempatkan file helper Anda di manapun di aplikasi Anda, cara yang lebih intuitif dan standar menyarankan bahwa aplikasi tersebut seharusnya masuk ke dalam direktori app Anda.

Jadi, langsung buat direktori Helpers/MataPanda di bawah app dan buat file User.php dengan konten berikut. Tentu saja, Anda bisa menempatkannya langsung di bawah direktori app atau app/Helpers, namun dengan memberikan tingkat tambahan itu memungkinkan kita untuk mengatur helper kita dalam kondisi yang baik, khususnya bila Anda akan memiliki banyak dari mereka.

 <?php  
 //app/Helpers/MataPanda/User.php  
 namespace App\Helpers\MataPanda;  
 use Illuminate\Support\Facades\DB;  
 class User {  
   /**  
    * @param int $user_id User-id  
    *   
    * @return string  
    */  
   public static function get_username($user_id) {  
     $user = DB::table('users')->where('userid', $user_id)->first();  
     return (isset($user->username) ? $user->username : '');  
   }  
 }  

File dimulai dengan deklarasi namespace yang cukup standar:

 namespace App\Helpers\MataPanda;  

Tujuan helper kustom kita adalah mengambil username berdasarkan userid. Oleh karena itu, kita perlu berinteraksi dengan database, dan itu memaksa kita untuk meng-include DB Facade.

 use Illuminate\Support\Facades\DB;  

Bagi mereka yang tidak akrab dengan Facade Laravel, ini adalah cara lain yang mudah untuk mengakses objek dalam service containers. Sebagai alternatif, Anda bisa menggunakan dependency injection.

Nantinya, datanglah implementasi konkret dari helper kita. Seperti yang Anda lihat, ada metode statis yang mendefinisikan logika pengambilan nama pengguna berdasarkan userid.

 $user = DB::table('users')->where('userid', $user_id)->first();  









Objek $user menyimpan catatan database dengan userid yang cocok. Akhirnya, metodenya mengembalikan username sebagai respon dalam pernyataan berikut.

 return (isset($user->username) ? $user->username : '');  

Itu saja yang berkaitan dengan file helper kita.

Sekarang kita telah membuat file helper kita, tetapi pertanyaannya adalah bagaimana Anda akan menggunakannya? Dua solusi cepat muncul di benak saya:

  • Anda bisa memasukkan nama file helper kita ke dalam composer.json, sehingga otomatis termuat. Kemudian, Anda bisa langsung memanggil metode statis helper class kita.
  • Anda dapat melanjutkan dan membuat Laravel service provider yang memungkinkan Anda mendaftarkan file custom helper Anda sehingga Framework Laravel memuatnya bersama dengan dependensi lainnya. Daftarkan service provider tersebut di konfigurasi Laravel dan buat sebuah alias untuk menggunakan helper Anda.
Tentu saja, yang pertama cukup cepat dan mudah diterapkan, dan Anda mungkin tergoda untuk melakukannya, tapi saya lebih suka menyarankan yang terakhir karena lebih mirip cara seorang ahli dan lebih mudah dipelihara.

Pindah ke command line dan jalankan perintah berikut di root aplikasi Anda untuk membuat service provider baru.

 $php artisan make:provider MataPandaServiceProvider   
 Provider created successfully.  

Anda akan melihat pesan yang mengkonfirmasikan bahwa itu dibuat dengan sukses di bawah direktori app/Providers.

Buka file itu dan Anda seharusnya sudah melihat dua metode di dalamnya. Yang penting dalam konteks artikel ini adalah metode register. Ya, saat ini kosong, jadi mari beri beberapa hal agar lebih bermanfaat.

 public function register()  
 {  
   require_once app_path() . '/Helpers/MataPanda/User.php';  
 }  

Metode register digunakan untuk mendaftarkan dependensi Anda, dan kita telah benar-benar melakukannya. Kita telah menyertakan file custom helper kita.

Beginilah file app/Providers/MataPandaServiceProvider.php seharusnya terlihat setelah modifikasi.

 <?php  
 // app/Providers/MataPandaServiceProvider.php  
 namespace App\Providers;  
 use Illuminate\Support\ServiceProvider;  
 class MataPandaServiceProvider extends ServiceProvider  
 {  
   /**  
    * Bootstrap the application services.  
    *  
    * @return void  
    */  
   public function boot()  
   {  
     //  
   }  
   /**  
    * Register the application services.  
    *  
    * @return void  
    */  
   public function register()  
   {  
     require_once app_path() . '/Helpers/MataPanda/User.php';  
   }  
 }  

Jadi semuanya cukup bagus sejauh ini. Kita memiliki custom helper dan service provider kita di dalam table.

Selanjutnya, kita perlu memberi tahu Laravel tentang service provider kita sehingga bisa memuatnya bootstrapping. Mari kita buka config/app.php dan tambahkan entri berikut di dalam array providers di bagian akhir.

 App\Providers\MataPandaServiceProvider::class,  

Untuk menggunakan helper kita dengan cara yang mudah, kita bisa membuat alias juga. Jadi mari kita lakukan itu dengan menambahkan entri berikut dalam array aliases di akhir file yang sama.

 'MataPandaUser' => App\Helpers\MataPanda\User::class,  

Dengan menentukan entri ini, kita dapat memanggil helper kita dengan menggunakan kata kunci MataPandaUser. Cukup nyaman, ya? Sebagai referensi Anda, inilah file config/app.php yang lengkap.





 <?php  
 // config/app.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' => 'Laravel',  
   /*  
   |--------------------------------------------------------------------------  
   | Application Environment  
   |--------------------------------------------------------------------------  
   |  
   | This value determines the "environment" your application is currently  
   | running in. This may determine how you prefer to configure various  
   | services your 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'),  
   /*  
   |--------------------------------------------------------------------------  
   | 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',  
   /*  
   |--------------------------------------------------------------------------  
   | 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',  
   /*  
   |--------------------------------------------------------------------------  
   | Logging Configuration  
   |--------------------------------------------------------------------------  
   |  
   | Here you may configure the log settings for your application. Out of  
   | the box, Laravel uses the Monolog PHP logging library. This gives  
   | you a variety of powerful log handlers / formatters to utilize.  
   |  
   | Available Settings: "single", "daily", "syslog", "errorlog"  
   |  
   */  
   'log' => env('APP_LOG', 'single'),  
   'log_level' => env('APP_LOG_LEVEL', 'debug'),  
   /*  
   |--------------------------------------------------------------------------  
   | 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' => [  
     /*  
      * Laravel Framework Service Providers...  
      */  
     Illuminate\Auth\AuthServiceProvider::class,  
     Illuminate\Broadcasting\BroadcastServiceProvider::class,  
     Illuminate\Bus\BusServiceProvider::class,  
     Illuminate\Cache\CacheServiceProvider::class,  
     Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,  
     Illuminate\Cookie\CookieServiceProvider::class,  
     Illuminate\Database\DatabaseServiceProvider::class,  
     Illuminate\Encryption\EncryptionServiceProvider::class,  
     Illuminate\Filesystem\FilesystemServiceProvider::class,  
     Illuminate\Foundation\Providers\FoundationServiceProvider::class,  
     Illuminate\Hashing\HashServiceProvider::class,  
     Illuminate\Mail\MailServiceProvider::class,  
     Illuminate\Notifications\NotificationServiceProvider::class,  
     Illuminate\Pagination\PaginationServiceProvider::class,  
     Illuminate\Pipeline\PipelineServiceProvider::class,  
     Illuminate\Queue\QueueServiceProvider::class,  
     Illuminate\Redis\RedisServiceProvider::class,  
     Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,  
     Illuminate\Session\SessionServiceProvider::class,  
     Illuminate\Translation\TranslationServiceProvider::class,  
     Illuminate\Validation\ValidationServiceProvider::class,  
     Illuminate\View\ViewServiceProvider::class,  
     /*  
      * Package Service Providers...  
      */  
     Laravel\Tinker\TinkerServiceProvider::class,  
     /*  
      * Application Service Providers...  
      */  
     App\Providers\AppServiceProvider::class,  
     App\Providers\AuthServiceProvider::class,  
     // App\Providers\BroadcastServiceProvider::class,  
     App\Providers\EventServiceProvider::class,  
     App\Providers\RouteServiceProvider::class,  
     App\Providers\MataPandaServiceProvider::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' => [  
     'App' => Illuminate\Support\Facades\App::class,  
     'Artisan' => Illuminate\Support\Facades\Artisan::class,  
     'Auth' => Illuminate\Support\Facades\Auth::class,  
     'Blade' => Illuminate\Support\Facades\Blade::class,  
     'Broadcast' => Illuminate\Support\Facades\Broadcast::class,  
     'Bus' => Illuminate\Support\Facades\Bus::class,  
     'Cache' => Illuminate\Support\Facades\Cache::class,  
     'Config' => Illuminate\Support\Facades\Config::class,  
     'Cookie' => Illuminate\Support\Facades\Cookie::class,  
     'Crypt' => Illuminate\Support\Facades\Crypt::class,  
     'DB' => Illuminate\Support\Facades\DB::class,  
     'Eloquent' => Illuminate\Database\Eloquent\Model::class,  
     'Event' => Illuminate\Support\Facades\Event::class,  
     'File' => Illuminate\Support\Facades\File::class,  
     'Gate' => Illuminate\Support\Facades\Gate::class,  
     'Hash' => Illuminate\Support\Facades\Hash::class,  
     'Lang' => Illuminate\Support\Facades\Lang::class,  
     'Log' => Illuminate\Support\Facades\Log::class,  
     'Mail' => Illuminate\Support\Facades\Mail::class,  
     'Notification' => Illuminate\Support\Facades\Notification::class,  
     'Password' => Illuminate\Support\Facades\Password::class,  
     'Queue' => Illuminate\Support\Facades\Queue::class,  
     'Redirect' => Illuminate\Support\Facades\Redirect::class,  
     'Redis' => Illuminate\Support\Facades\Redis::class,  
     'Request' => Illuminate\Support\Facades\Request::class,  
     'Response' => Illuminate\Support\Facades\Response::class,  
     'Route' => Illuminate\Support\Facades\Route::class,  
     'Schema' => Illuminate\Support\Facades\Schema::class,  
     'Session' => Illuminate\Support\Facades\Session::class,  
     'Storage' => Illuminate\Support\Facades\Storage::class,  
     'URL' => Illuminate\Support\Facades\URL::class,  
     'Validator' => Illuminate\Support\Facades\Validator::class,  
     'View' => Illuminate\Support\Facades\View::class,  
     'MataPandaUser' => App\Helpers\MataPanda\User::class,  
   ],  
 ];  





Kita hampir sampai! Kita telah melakukan semua kerja keras untuk sampai ke sini, dan sekarang kita bisa menuai keuntungan dari custom helper kita.

Sekali lagi, untuk menjaga agar tetap sederhana dan mudah, kita akan menentukan rute Laravel dasar dan memanggil helper kita dari sana!

Silakan membuat file routes/web.php dengan konten berikut.

 <?php  
 // routes/web.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!  
 |  
 */  
 Route::get('/matapanda-user-helper-demo', function () {  
   return MataPandaUser::get_username(1);  
 });  

Apakah itu perlu penjelasan? Kita baru saja memanggil custom helper dengan singkatan MataPandaUser::get_username, dan seharusnya mengembalikan username.

Tentu saja, Anda dapat memanggil helper kita dari mana saja di aplikasi, baik itu controller atau view.

Jadi itu mengakhiri artikel kami untuk hari ini.

Helper di Laravel benar-benar merupakan fitur yang hebat, dan saya yakin bahwa sebagai pengembang, Anda akan senang untuk memperpanjangnya. Dan itulah artikel hari ini, kita telah melewati dasar-dasar struktur file helper Laravel dan menciptakan helper yang berguna.

Saya harap Anda menikmati artikel ini dan membantu Anda menciptakan custom helper Anda sendiri dalam pengembangan aplikasi Laravel sehari-hari.

Jangan ragu untuk meninggalkan komentar dan pertanyaan Anda di kolomkomentar di bawah. Kami juga menanggapi komentar dan pesan di FansPage Facebook kami dan kami akan menanggapi mereka sesegera mungkin!

Saya Menyadari ketika kalian selesai membaca tutorial ini, kalian pasti akan berkomentar atau membuat statement seperti ini :

"Ini adalah laravel facade bukan helper, helper lebih seperti global functions. Saya juga berpikir Anda bisa membuat fungsi untuk wrap facade ini."

atau pertanyaan/pernyataan seperti ini :

"Ini bukan laravel helper - helper di Laravel adalah global functions. Untuk mewujudkan real helper, lihat cara melakukannya di Laravel sources.

Tidak perlu menggunakan service provider. Helper class Anda akan dimuat oleh requst, karena direktori aplikasi sudah autoloading oleh Composer.

Lagi pula, itu adalah lumpuh untuk menggunakan service provider hanya untuk autoloading."

Jawaban saya seperti ini :

" #CMIIW (Harap perbaiki saya jika saya salah.)

Sesuai Laravel, facade adalah static proxies yang memungkinkan akses mudah ke classes yang mendasarinya di "Service Container".

Di sisi lain, kita memiliki logika kita sendiri di classe kita yang dieksekusi dan mengembalikan hasilnya. Jika ini akan menjadi facade, kita bisa mengakses objek dari service container dan menggunakannya untuk melakukan hal-hal tersebut.

Juga, saya mengerti kekhawatiran Anda ketika Anda mengatakan itu bukan Laravel helper. Sebenarnya, saya baru saja membuat sebuah classes sehingga Anda dapat mengelompokkan beberapa helper functions, jadi itu cara yang berbeda untuk membuatnya. Dan, Anda dapat memanggil custom helper yang kita buat dari mana saja dalam kode, jadi saya percaya ini adalah global dalam konteks itu.

Bagaimanapun, jika Anda ingin pergi dengan cara prosedural, Anda hanya perlu mengganti kode di User.php dengan mengikuti.

 if (! function_exists('get_username')) {  
 function get_username($user_id)  
 {  
 $user = DB::table('users')->where('userid', $user_id)->first();  
 return (isset($user->username) ? $user->username : '');  
 }  
 }  

Dan, dalam hal ini Anda perlu mengimplementasikan service provider.

Di sisi lain, saya setuju dengan Anda bahwa helper berada dalam hierarki direktori "app" dan jika kita menggunakan bantuan berbasis classes, tidak perlu membuat service provider untuk itu. Ini akan dimuat secara otomatis menggunakan composer. Tetapi sekali lagi, jika Anda mengikuti cara prosedural, Anda perlu mengimplementasikan penyedia layanan."

Semoga Jawaban saya bisa anda mengerti dan membbantu anda, Stay Tune For The Next Tutorial.

Terima Kasih :).