سلام دوستان
توی لاراول اگر بخوام یه فانکشن بنویسم مثل ساخت slug که توی همه مدلها ازش استفاده کنم کجا باید بنویسم. مدل اصلی که همه مدلها ازش اکستند شدن رو لاراول پیشنهاد میده که چیزی توش ننویسیم.
@endworld
@mhyeganeh
@abdolrahman
@mohammadphp
یکی از مرسوم ترین روش هاش استفاده از 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);
}
@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;
}
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟