sina
2 سال پیش توسط sina مطرح شد
4 پاسخ

ساخت فانکشن در مدل اصلی

سلام دوستان
توی لاراول اگر بخوام یه فانکشن بنویسم مثل ساخت slug که توی همه مدلها ازش استفاده کنم کجا باید بنویسم. مدل اصلی که همه مدلها ازش اکستند شدن رو لاراول پیشنهاد میده که چیزی توش ننویسیم.
@endworld
@mhyeganeh
@abdolrahman
@mohammadphp


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 2 سال پیش مطرح شد
1

یکی از مرسوم ترین روش هاش استفاده از global helper function هست. یعنی یکسری function ها یا کلاس‌هایی که بصورت global تعریف میشن و همه جا در دسترس قرار خواهند داشت.
با اینکه قانون خاصی در خصوص نحوه اجرایی کردنش وجود نداره اما یکی از best practice ها و روش های رایج این هست که یک پوشه داخل app بسازید بنام Helpers و بعد داخلش فایل ها و کلاس های خودتون رو قرار بدید. مثلا یک فایل بنام slug.php.

داخلش در ساده ترین شکل یک function میسازید به این شکل:

<?php

function to_slug_fa(string $text){
    $slug = //Do your stuff
    return $slug
}

بعد یک service provider می‌سازید مثلا بنام MyHelpersServiceProvider و داخلش اینجوری می‌نویسید:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class MyHelpersServiceProvider extends ServiceProvider {

    public function register() {

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

    }

    public function boot() {
        //
    }

}

و حالا در مرحله آخر باید به لاراول بگید که این service provider رو هم لود کنه. که تنها کافیه عبارت زیر رو در آرایه proivers در فایل config/app.php قرار بدید:

 App\Providers\MyHelpersServiceProvider::class,

و تمام. از این به بعد هر فایلی که با پسوند php داخل پوشه Helpers قرار بدید بصورت اتومات لود میشه و می‌تونید از class ها و function هایی که اونجا تعریف کردید بصورت global استفاده کنید. مثلا در کنترلرتون به همین سادگی می‌تونید از فانکشن تبدیل به slug که ایجاد کردیم استفاده کنید:

    //...
    $post->slug = to_slug_fa($request->title);
}

sina
@s.aerospace 2 سال پیش مطرح شد
0

@mhyeganeh
بسیار عالی ممنونم


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 2 سال پیش مطرح شد
0

موفق و پیروز باشید.


sina
@s.aerospace 2 سال پیش آپدیت شد
0

@mhyeganeh
ببخشید من یک سوال دیگه برام پیش اومد در ادامه این سوال.
اگرا بخواهیم مدل رو تووی helperFunction داشته بشیم کاری که من کردم درست هست؟ مدل رو توی کنترلر new کردم و فرستادم به helper
کار میکنه ولی نمیدونم درسته یا نه
برای چک کردن اینکه slug تکراری نباشه به model احتیاج دارم

        // Controller
        $model = new Category();
        $slug = to_slug_fa($title, $model);
<?php

//HelperFunctionSlug
function to_slug_fa(string $text, $model){

    $slg = str_replace(' ', '-', $text);
    $latestSlg = $model->whereRaw("slug RLIKE '^{$slg}(-[0-9]*)?$'")->orderBy('id')->pluck('slug')->last();
    if (!$latestSlg){
        $slug = $slg;
//
    }else {
        $pieces = explode('-', $latestSlg);
        $number = intval(end($pieces));
        $slg .= '-' . ($number + 1);
        $slug = $slg;
    }
    return $slug;
}

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام