ساخت helper سفارشی در لاراول

لاراول برای ما توابع زیادی رو آماده کرده که هرجایی صدا زده می شوند و میتونن موجب تسریع کار توسعه بشوند. انواع توابع برای کار با آرایه ها, رشته ها, آبجکت ها, مسیرها, رشته ها و URL ها و ... در لاراول موجود هستند.

اگرچه این توابع در لاراول وجود دارند اما ممکن است شما بخواهید تابع کمکی سفارشی خودتون رو بسازید و در هرجای پروژه ازش استفاده کنید تا از تکرار کدها جلوگیری بشه.

در این مقاله به بررسی نحوه ساخت helper سفارشی در لاراول می پردازیم.

ساخت فایل helper در لاراول

شما میتونید مکان فایل کمکی خودتون رو سازماندهی کنید, بهرحال من ترجیح میدم که فایل کمکی رو در مسیر app/Helpers/Helper.php بسازم. بنابراین فایلی با نام دلخواه (در اینجا Helper.php) بسازید و در مسیر ذکر شده قرار بدید. محتوای تابع کمکی ما میتونه متفاوت باشه, برای نمونه ما از تکه کد زیر در فایل Helper.php استفاده می کنیم :

 
 
<?php
 
 
 
if (!function_exists('human_file_size')) {
 
/**
 
* Returns a human readable file size
 
*
 
* @param integer $bytes
 
* Bytes contains the size of the bytes to convert
 
*
 
* @param integer $decimals
 
* Number of decimal places to be returned
 
*
 
* @return string a string in human readable format
 
*
 
* */
 
function human_file_size($bytes, $decimals = 2)
 
{
 
$sz = 'BKMGTPE';
 
$factor = (int)floor((strlen($bytes) - 1) / 3);
 
return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . $sz[$factor];
 
 
 
}
 
}
 
 
 
if (!function_exists('in_arrayi')) {
 
 
 
/**
 
* Checks if a value exists in an array in a case-insensitive manner
 
*
 
* @param mixed $needle
 
* The searched value
 
*
 
* @param $haystack
 
* The array
 
*
 
* @param bool $strict [optional]
 
* If set to true type of needle will also be matched
 
*
 
* @return bool true if needle is found in the array,
 
* false otherwise
 
*/
 
function in_arrayi($needle, $haystack, $strict = false)
 
{
 
return in_array(strtolower($needle), array_map('strtolower', $haystack), $strict);
 
}
 
}

(اختیاری) اگر شما از یک کلاس استفاده میکنید و متدهایش helper های شماست. باید کدتون رو با تکه کد زیر برای namespace آغاز کنید :

namespace App\Helpers;

اگر از  namespace استفاده نکنید کد شما global میشه و در هرجا بدون استفاده از  namespace صدا زده می شوند. 

تمام توابع کمکی لاراول باید بررسی بشوند که قبلا وجود نداشته باشند, پس دلیل استفاده از تکه کد زیر این است :

 
 
if (!function_exists('human_file_size')) {
 
function human_file_size($bytes, $decimals = 2)
 
{
 
// ...
 
}
 
}

استفاده از فایل helper

حالا که فایل کمکی ما آماده شده, می خواهیم بررسی کنیم که چطور میشه ازشون استفاده کرد.

  • شما میتونید با استفاده از composer فایل کمکی رو بارگذاری کنید. سپس میتونید به راحتی در هرجا از توابع استفاده کنید.
  • شما میتونید با استفاده از service provider لاراول این فایل رو ثبت کنید. لاراول این رو به همراه سایر وابستگی ها بارگذاری میکنه.
  • همچنین میتونید با استفاده از یک پکیج این کار رو انجام بدید.

استفاده از Composer برای Autoload فایل ها

راه پیشنهادی ما و ساده ترین راه موجود استفاده از composer هست. کافیه فایل composer.json رو باز کنید و در قسمت autoload و files اون رو اضافه کنید :

 
 
"autoload": {
 
"files": [
 
"app/Helpers/Helper.php"
 
],
 
"classmap": [
 
"database/seeds",
 
"database/factories"
 
],
 
"psr-4": {
 
"App\\": "app/"
 
}
 
},

بعد از تغییر فایل composer.json شما باید دستور زیر رو در مسیر پروژه لاراولی وارد کنید :

composer dump-autoload

حالا helper شما براحتی قابل استفاده است.

استفاده از service provider

برای استفاده از این روش باید به مسیر پروژه برید و دستور زیر رو برای ساخت یک provider جدید اجرا کنید :

php artisan make:provider HelperServiceProvider

بعد از اینکه فایل ساخته شد, وارد فایل بشید و تغییر زیر رو انجام بدید :

 
 
public function register()
 
{
 
$file = app_path('Helpers/Helper.php');
 
if (file_exists($file)) {
 
require_once($file);
 
}
 
}

همچنین با استفاده از کد زیر میتونید تمام فایل های موجود در مسیر app/Helper رو بارگذاری کنید :

 
 
public function register()
 
{
 
foreach (glob(app_path() . '/Helpers/*.php') as $file) {
 
require_once($file);
 
}
 
}

سپس فایل config/app.php رو باز کرده و خط زیر رو در ارایه providers اضافه کنید :

App\Providers\HelperServiceProvider::class,

اگر کمکی شما شامل کلاس میشه میتونید خط زیر رو در قسمت aliases اضافه کنید تا راحت تر بهش دسترسی پیدا کنید :

'Helper' => App\Helpers\Helper::class,

استفاده از پکیج آماده

استفاده از پکیج اضافی نیاز نیست اما اگر بخواهید یکسری کمکی دیگر هم داشته باشید و کمکی خودتون رو هم بسازید. پکیج browner12/helpers رو پیشنهاد میکنیم.

حالا که شرایط رو برای استفاده از کمکی فراهم کردید کافیه هرکجای کد که خواستید تابع helper سفارشی خودتون رو صدا بزنید.

تنظیمات قالب
عبارت خود را درج و جهت جستجو "Enter" را بفشارید

گفتگوی آنلاین دانشگاه