راکت
حل شده

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

4 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

4
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

بهترین پاسخ

یکی از مرسوم ترین روش هاش استفاده از 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
sina
@s.aerospace

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

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

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

شاید پاسخ شما همین‌جا باشد

sina
sina
@s.aerospace

@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;
}

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

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