API عمومی PHP
Laravel Scaffolder در درجه اول یک Code Generator مبتنی بر Artisan است. API عمومی runtime آن بیشتر روی پشتیبانی داخلی تاریخ جلالی متمرکز است.
برای گزینههای Generator به مرجع CLI مراجعه کنید.
goli()
Helper سراسری goli() از ورودیهای تاریخ پشتیبانیشده یک نمونه Goli میسازد:
$jalali = goli(now());
$jalali = goli('2024-03-20 12:00:00');
$jalali = goli(1710936000);
Timezone اختیاری را میتوان بهعنوان آرگومان دوم داد:
$jalali = goli('2024-03-20 12:00:00', 'Asia/Tehran');
goli_date() alias همین helper با همان ورودی و خروجی است.
Goli
use Efati\ModuleGenerator\Support\Goli;
ساخت و Parse کردن:
$now = Goli::now();
$date = Goli::parse('2024-03-20 12:00:00');
$jalali = Goli::parseGoli('1403-01-01 12:00:00');
$created = Goli::create(1403, 1, 1, 12, 0, 0);
$fromTimestamp = Goli::fromTimestamp(time());
چند متد پرکاربرد:
$jalali->format('Y/m/d H:i:s');
$jalali->toGoliDateString();
$jalali->toGoliDateTimeString();
$jalali->toGoliArray(withTime: true);
$jalali->toCarbon();
$jalali->toIso8601String();
$jalali->diffForHumans();
برای خروجی با ارقام فارسی:
$jalali->toGoliDateString(true);
$jalali->format('Y/m/d', true);
$jalali->diffForHumans(null, true);
GoliDateCast
برای attributeهای Eloquent که باید هنگام خواندن به Goli تبدیل شوند ولی در دیتابیس با تاریخ Gregorian ذخیره شوند:
use Efati\ModuleGenerator\Casts\GoliDateCast;
protected function casts(): array
{
return [
'scheduled_at' => GoliDateCast::class,
];
}
Cast در زمان set میتواند تاریخ Gregorian، Carbon/DateTime، رشته/آرایه جلالی و نمونه Goli را دریافت کند.
HasGoliDates
Trait میتواند چند attribute را از روی property مدل به GoliDateCast متصل کند:
use Efati\ModuleGenerator\Support\HasGoliDates;
class Event extends Model
{
use HasGoliDates;
protected array $goliDates = [
'starts_at',
'ends_at',
];
}
در runtime هم میتوان attribute جدید اضافه کرد:
$event->addGoliDateCast('published_at');
ApiResponseHelper::formatDates()
ApiResponseHelper قابل انتشار، یک متد صریح برای فرمت تاریخ دارد:
$result = ApiResponseHelper::formatDates(now());
خروجی شامل تاریخ/زمان Gregorian، تاریخ جلالی با ارقام فارسی و ISO-8601 است. تبدیل تاریخ در responseها خودکار و global نیست و باید این متد را صریحاً استفاده کنید.
Container Binding
Service Provider کلید goli را bind و به کلاس Goli alias میکند:
$jalali = app('goli', [
'datetime' => now(),
'timezone' => 'Asia/Tehran',
]);
مثال اجرایی
مثال مستقل تبدیل تاریخ در این فایل قرار دارد:
examples/goli-date.php
بعد از نصب dependencyها:
php examples/goli-date.php
Facade یا Service با نام ModuleGenerator وجود ندارد
نسخه فعلی پکیج Facade با namespace قدیمی AfshinEfati\LaravelModuleGenerator\Facades\ModuleGenerator یا Service با نام ModuleGenerator ارائه نمیکند. تولید ماژول از طریق Artisan commandهای ثبتشده انجام میشود.