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

گردآوری و تالیف : امیررضا سیستانه ای
تاریخ انتشار : 26 اسفند 1396
دسته بندی ها : لاراول

لاراول برای ما توابع زیادی رو آماده کرده که هرجایی صدا زده می شوند و میتونن موجب تسریع کار توسعه بشوند. انواع توابع برای کار با آرایه ها, رشته ها, آبجکت ها, مسیرها, رشته ها و 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 سفارشی خودتون رو صدا بزنید.

منبع

مقالات پیشنهادی

ساخت گزارش ورود کاربران در لاراول

اینجا می خواهیم درمورد ساخت یک سیستم مدیریت گزارش ساده در لاراول بحث کنیم. من جداول سفارشی log (گزارش) و کمکی facade که بتونید گزارش کاربران رو ردیابی...

ساخت QrCode در لاراول

در این مقاله میخواهیم درمورد نحوه ساخت استفاده از QrCode ها در لاراول صحبت کنیم.پکیجی که برای این کار ازش استفاده می کنیم Simpe QrCode هست

آموزش ساخت دستور سفارشی artisan در لاراول

لاراول به همراه تعدادی دستور artisan آمده که ما در بخش های مختلف پروژه ازشون استفاده می کنیم. بعضی از اونها معمول ترند مثل make:controller برای ساخت ک...

ساخت و مدیریت قالب ها در لاراول

در این مقاله می خواهیم یک پکیج جالب و کاربردی لاراول به اسم laravel-theme رو بررسی کنیم. این یک پکیج پایه است که مدیریت قالب ها (تم ها) در لاراول رو پ...