پرش به مطلب اصلی

توابع کمکی PHP

این صفحه فقط helperهایی را پوشش می‌دهد که برای توسعه‌ی اپلیکیشن کاربردی‌اند؛ نه helperهای داخلی رندر، ژنراتور یا زیرساختی که بیشتر برای توسعه‌ی خود package استفاده می‌شوند.

احراز هویت

این helperها برای زمانی هستند که بخواهید flowهای auth را خارج از UI آماده package پیاده کنید، اما definitionها و abstractionهای همان سیستم را نگه دارید.

authenticator

instance جاری Authenticator را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: Dornica\AccessHub\Authentication\Authenticator

مثال
$user = authenticator()->user();

authFieldDefinitions

همه definitionهای auth field را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: array

مثال
$fields = authFieldDefinitions();

authFieldNames

نام همه auth fieldهای تعریف‌شده را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: array

نمونه خروجی: ['code', 'mobile']

مثال
$fieldNames = authFieldNames();

authFieldDefinition

تعریف یک auth field خاص را برمی‌گرداند.

پارامترها:

نامنوعتوضیح
authFieldstringنام field
defaultarrayمقدار پیش فرض در صورت نبود definition

نوع خروجی: array

مثال
$mobileField = authFieldDefinition('mobile');

registrationAuthFieldDefinitions

فقط auth fieldهایی را برمی‌گرداند که برای registration فعال‌اند.

پارامترها:
ندارد

نوع خروجی: array

مثال
$registrationFields = registrationAuthFieldDefinitions();

passwordRecoveryAuthFieldDefinitions

فقط auth fieldهایی را برمی‌گرداند که برای forgot password فعال‌اند.

پارامترها:
ندارد

نوع خروجی: array

مثال
$recoveryFields = passwordRecoveryAuthFieldDefinitions();

userMetaFieldGroups

همه گروه‌های meta field را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: array

مثال
$metaGroups = userMetaFieldGroups();

userMetaFields

meta fieldهای تعریف‌شده را بر اساس person type برمی‌گرداند.

پارامترها:

نامنوعتوضیح
personTypePersonType | nullدر صورت ارسال، فقط fieldهای همان person type برگردانده می‌شود

نوع خروجی: array

مثال
use Dornica\AccessHub\Authentication\Enums\PersonType;

$realFields = userMetaFields(PersonType::REAL);

authPasswordLength

حداقل و حداکثر طول مجاز password را از تنظیمات برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: array{0:int,1:int}

نمونه خروجی: [8, 32]

مثال
[$min, $max] = authPasswordLength();

userActivationModel

کلاس مدل activation را برمی‌گرداند تا در flowهای سفارشی آن را hardcode نکنید.

پارامترها:
ندارد

نوع خروجی: string

مثال
$activationModel = userActivationModel();
$row = $activationModel::query()->find($id);

بومی‌سازی و تاریخ

localizor

نمونه‌ی سرویس localization فعلی را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: Dornica\Foundation\Localization\Localization

نمونه خروجی: نمونه‌ای از سرویس localization که می‌توانید متدهایی مثل getCurrentLanguage() را روی آن صدا بزنید.

مثال
$language = localizor()->getCurrentLanguage();

getLanguage

زبان جاری پروژه را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: mixed

نمونه خروجی: "fa"

مثال
$language = getLanguage();

getPortal

پرتال یا context فعلی را از localization برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: mixed

نمونه خروجی: "admin"

مثال
$portal = getPortal();

isProjectLocalized

مشخص می‌کند قابلیت localization در پروژه فعال است یا نه.

پارامترها:
ندارد

نوع خروجی: bool

نمونه خروجی: true

مثال
if (isProjectLocalized()) {
// ...
}

hijri

برای کار با تاریخ هجری. ورودی می‌تواند Carbon، DateTime، timestamp، رشته یا null باشد.

پارامترها:

نامنوعتوضیح
datetimeCarbon | DateTime | string | int | nullتاریخ ورودی
timezoneDateTimeZone | string | nullمنطقه زمانی

نوع خروجی: Dornica\Foundation\Hijri\Hijri

نمونه خروجی: یک شیء Hijri که تاریخ هجری معادل را نگه می‌دارد.

مثال
$now = hijri();
$date = hijri('1446-09-25');
$fromCarbon = hijri(now());

فرمت، نمایش و متن

stringMaskFormatter

یک رشته‌ی عددی را روی mask می‌نشاند. در mask باید از X برای جای‌گذاری استفاده شود.

پارامترها:

نامنوعتوضیح
maskstringالگوی ماسک
inputstring | nullمقدار عددی خام

نوع خروجی: string

نمونه خروجی: "123-456"

مثال
stringMaskFormatter('XXX-XXX', '123456'); // 123-456

numberSeparator

عدد را با جداکننده‌ی هزارگان فرمت می‌کند.

پارامترها:

نامنوعتوضیح
valuemixedمقدار عددی

نوع خروجی: string

نمونه خروجی: "1,250,000"

مثال
numberSeparator(1250000); // 1,250,000

spellNumber

عدد را به معادل حروفی فارسی تبدیل می‌کند. برای نوشتن مبلغ روی فاکتور، قرارداد و چک کاربرد دارد.

پارامترها:

نامنوعتوضیح
numberint | float | stringعدد؛ اعشار نادیده گرفته می‌شود
suffixstringواحدی که به انتهای متن اضافه می‌شود، مثل تومان

نوع خروجی: string

نمونه خروجی: "دو میلیون و پانصد هزار تومان"

مثال
spellNumber(2500000); // دو میلیون و پانصد هزار
spellNumber(2500000, 'تومان'); // دو میلیون و پانصد هزار تومان
spellNumber(-45); // منفی چهل و پنج
spellNumber(0); // صفر
نکته‌ها
  • واژگان خروجی دقیقاً مطابق helper سمت مرورگر (convertAmountToText) است، پس متنی که در سرور ساخته می‌شود با متنی که در فرم نمایش داده می‌شود یکی است.
  • بازه‌ی پشتیبانی تا سقف int در PHP است (کوینتیلیون).
  • ورودی غیرعددی یا خارج از بازه، به‌جای تولید متن اشتباه، InvalidArgumentException می‌دهد.

اگر به جای helper سراسری به خود کلاس نیاز داشتید:

use Dornica\Foundation\Core\Support\NumberSpeller;

NumberSpeller::spell(2500000, 'تومان');

formatBytes

حجم بایت را به رشته‌ی خوانا مثل KB و MB تبدیل می‌کند.

پارامترها:

نامنوعتوضیح
bytesfloat | intحجم فایل
precisionintتعداد ارقام اعشار
persianTranslateboolاستفاده از واحدهای فارسی

نوع خروجی: string

نمونه خروجی: "15 KB" یا "15 کیلوبایت"

مثال
formatBytes(15360); // 15 KB
formatBytes(15360, 2, true); // 15 کیلوبایت

formatFileSize

برای نمایش اندازه‌ی فایل با ترجمه‌های Doravel در کامپوننت‌های آپلود فایل مناسب است.

پارامترها:

نامنوعتوضیح
bytesintاندازه فایل بر حسب بایت

نوع خروجی: string

نمونه خروجی: "5 MB"

مثال
formatFileSize(5242880);

parseSize

رشته‌هایی مثل 10M یا 2G را به کیلوبایت تبدیل می‌کند.

پارامترها:

نامنوعتوضیح
sizestringمقدار متنی اندازه

نوع خروجی: float | int

نمونه خروجی: 10240

مثال
parseSize('10M');

convertExtensionsToDotFormat

لیست extensionها را از حالت jpg,png,pdf به .jpg,.png,.pdf تبدیل می‌کند.

پارامترها:

نامنوعتوضیح
extensionsstringلیست extensionها با جداکننده comma

نوع خروجی: string

نمونه خروجی: ".jpg,.png,.pdf"

مثال
convertExtensionsToDotFormat('jpg,png,pdf');

groupBodyTooltip

HTML لازم برای tooltip ساده در جدول‌ها یا کارت‌ها را می‌سازد.

پارامترها:

نامنوعتوضیح
valuestringمتن اصلی
titlestring | nullعنوان tooltip
valueClassstring | nullکلاس CSS اختیاری

نوع خروجی: string

نمونه خروجی: قطعه HTML شامل data-bs-toggle="tooltip" و متن فعال.

مثال
echo groupBodyTooltip('فعال', 'وضعیت');

presetColors

یک palette آماده از رنگ‌ها برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: array

نمونه خروجی: ['#FF5733', '#FF8D1A', '#FFC300', ...]

مثال
$colors = presetColors();

renderColor

یک closure برای نمایش رنگ به صورت دایره‌ی کوچک در خروجی جدول یا لیست برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: Closure

نمونه خروجی: <span class='d-inline-block rounded-circle bg-primary' ...></span>

مثال
$renderer = renderColor();
echo $renderer('#0d6efd', $entity);

enumBadgeVariant

برای تبدیل مقدار enum یا status به variant مناسب badge.

پارامترها:

نامنوعتوضیح
valuemixedمقدار status یا enum
customColorsarray | nullنگاشت سفارشی رنگ‌ها

نوع خروجی: string

نمونه خروجی: "success" یا "danger"

مثال
enumBadgeVariant(1); // success
enumBadgeVariant(0); // danger

getEnumName

نام ترجمه‌شده‌ی یک مقدار enum را برمی‌گرداند.

پارامترها:

نامنوعتوضیح
enummixedکلاس enum
selectedItemmixedمقدار انتخاب‌شده
modulestring | nullنام ماژول ترجمه
isEnumboolمشخص‌کردن enum بودن ورودی

نوع خروجی: array | string | null

نمونه خروجی: "فعال"

مثال
getEnumName(UserStatusEnum::class, 1, 'user-management');

parsedUserAgentInfo

اطلاعات پایه‌ی سیستم عامل، مرورگر و platform را از user-agent استخراج می‌کند.

پارامترها:

نامنوعتوضیح
userAgentstringمقدار user-agent

نوع خروجی: array

نمونه خروجی: ['os' => 'Windows 10', 'browser' => 'Chrome 126.0', 'platform' => 'Desktop']

مثال
$info = parsedUserAgentInfo($request->userAgent());

فرم و کامپوننت‌ها

prepareSelectComponentData

برای ساخت داده‌ی سازگار با selectهای Doravel از روی Model، Collection یا Enum.

پارامترها:

نامنوعتوضیح
sourcemixedمنبع داده
labelColumnstringنام ستون label
valueColumnstringنام ستون value
shouldEncryptValueboolرمزنگاری مقدارها
moduleNamestring | nullنام ماژول
prefixstring | nullپیشوند ترجمه
extraAttributesarrayفیلدهای اضافه

نوع خروجی: array

نمونه خروجی: آرایه‌ای مثل [['name' => 'تهران', 'id' => 1, 'selected' => false, 'is_active' => true]]

مثال
$options = prepareSelectComponentData(
source: UserStatusEnum::class,
shouldEncryptValue: false,
moduleName: 'user-management'
);
مثال
$options = prepareSelectComponentData(
source: \App\Models\City::class,
labelColumn: 'title',
valueColumn: 'id'
);

makeDatetimeRangePickerID

شناسه‌ی مناسب برای datetime range picker تولید می‌کند.

پارامترها:

نامنوعتوضیح
idstring | nullشناسه مستقیم
dedicatedNamestring | nullنام اختصاصی
namestring | nullنام فیلد

نوع خروجی: string

نمونه خروجی: "x-component-created_at_range"

مثال
$id = makeDatetimeRangePickerID(null, 'created_at_range', null);

filterValidation

یک closure می‌سازد که بتوانید برای validate کردن مقدار فیلترها از آن استفاده کنید.

پارامترها:

نامنوعتوضیح
rulesarrayruleهای اعتبارسنجی

نوع خروجی: Closure

نمونه خروجی: true

مثال
$validator = filterValidation(['required', 'numeric']);
$isValid = $validator('120');

generatePasswordRule

rules لازم برای فیلد password را بر اساس حداقل و حداکثر طول می‌سازد.

پارامترها:

نامنوعتوضیح
minmixedحداقل طول
maxmixedحداکثر طول

نوع خروجی: array

نمونه خروجی: ['password' => ['min:8', 'max:32', 'required']]

مثال
$rules = array_merge([
'email' => ['required', 'email'],
], generatePasswordRule(8, 32));

فایل و آپلود

getFile

فایل را از FileManager برمی‌گرداند.

پارامترها:

نامنوعتوضیح
fileIDint | nullشناسه فایل

نوع خروجی: object | null

نمونه خروجی: یک شیء فایل شامل اطلاعاتی مثل id, path, name

مثال
$file = getFile($user->avatar_id);

uploadFile

آپلود فایل را با اتصال به entity و file type مدیریت می‌کند.

پارامترها:

نامنوعتوضیح
fieldstringنام فیلد فایل در request
dbFieldstringنام فیلد دیتابیس
fileTypeCodestringکد نوع فایل
fileTypemixedنوع فایل
entityobjectموجودیت هدف
modulestring | nullنام ماژول
isPublicboolعمومی یا خصوصی بودن فایل

نوع خروجی: mixed

نمونه خروجی: فایل upload می‌شود و فیلد avatar_id روی entity مقداردهی می‌شود.

مثال
uploadFile(
field: 'avatar',
dbField: 'avatar_id',
fileTypeCode: 'USER_AVATAR',
fileType: $fileType,
entity: $user,
module: 'user-management'
);

مسیر، فیلتر و جستجو

makePanelRouteName

نام route را با guard پیش‌فرض پنل می‌سازد.

پارامترها:

نامنوعتوضیح
namestringنام route

نوع خروجی: string

نمونه خروجی: "admin.dashboard.index"

مثال
$route = makePanelRouteName('dashboard.index');

لینکی می‌سازد که query string فیلتر جدول یا لیست فعلی را هم با خود حمل کند.

پارامترها:

نامنوعتوضیح
namestringنام route
parametersarrayپارامترهای route
absoluteboolabsolute بودن URL

نوع خروجی: string

نمونه خروجی: https://example.com/admin/users?xfg=users-filter

مثال
$url = appendFilterQueryParamsToLinks('users.index');

handleSearchAndResetPage

وقتی search عوض می‌شود، عبارت جستجو را نگه می‌دارد و کاربر را بدون page به route برمی‌گرداند تا pagination ریست شود.

پارامترها:

نامنوعتوضیح
searchstring | nullعبارت جستجو
sectionNamestringنام بخش
routeNamestringنام route
routeParamsarrayپارامترهای route

نوع خروجی: RedirectResponse | null

نمونه خروجی: یک RedirectResponse به route مقصد بدون پارامتر page

مثال
return handleSearchAndResetPage(
search: request('search'),
sectionName: 'users',
routeName: 'panel.users.index'
) ?? null;

دسترسی و کاربران

policyCheck

نتیجه‌ی policy را به صورت Gate::inspect() برمی‌گرداند.

پارامترها:

نامنوعتوضیح
abilitystringنام ability
entitymixedمدل یا موجودیت هدف

نوع خروجی: Illuminate\Auth\Access\Response

نمونه خروجی: شیئی که مثلا allowed() یا denied() را مشخص می‌کند.

مثال
$response = policyCheck('update', $user);

if ($response->denied()) {
// ...
}

policyAuthorize

برای enforce کردن policy با پرتاب exception در صورت عدم دسترسی.

پارامترها:

نامنوعتوضیح
abilitystringنام ability
entitymixedمدل یا موجودیت هدف

نوع خروجی: void

نمونه خروجی: در صورت داشتن دسترسی ادامه اجرا، و در غیر این صورت خطای authorization.

مثال
policyAuthorize('delete', $user);

اگر کاربر دسترسی لازم داشته باشد، مقدار را به لینک نمایش یا ویرایش تبدیل می‌کند؛ وگرنه همان متن ساده را برمی‌گرداند.

پارامترها:

نامنوعتوضیح
valuemixedمتن یا مقدار خروجی
showPermissionstring | nullroute یا permission نمایش
editPermissionstring | nullroute یا permission ویرایش
showParametersarrayپارامترهای نمایش
editParametersarrayپارامترهای ویرایش

نوع خروجی: mixed

نمونه خروجی: یا یک لینک HTML به صفحه کاربر، یا فقط متن ساده نام کاربر.

مثال
echo renderConditionalLink(
value: $user->name,
showPermission: 'users.show',
editPermission: 'users.edit',
showParameters: ['user' => $user->id]
);

resolveUserHref

اگر کاربر جاری به صفحه‌ی کاربر مقصد دسترسی داشته باشد، URL مناسب show یا edit را تولید می‌کند.

پارامترها:

نامنوعتوضیح
relatedUsermixedکاربر مرتبط

نوع خروجی: string | null

نمونه خروجی: https://example.com/admin/users/show/ENCRYPTED_ID

مثال
$href = resolveUserHref($ticket->creator);

getUserStatuses

لیست statusهای کاربران را از مدل تنظیم‌شده برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: array | mixed

نمونه خروجی: مجموعه‌ای از statusها مثل فعال, غیرفعال, مسدود

مثال
$statuses = getUserStatuses();

تبدیل login_type با Enum

برای کار با login_type از enum اصلی یعنی Dornica\AccessHub\Authentication\Enums\UserLoginType استفاده کنید.

  • برای تبدیل آرایه مقادیر به bitmask از UserLoginType::composeLoginTypeMask(...)
  • برای خواندن bitmask و تبدیل آن به enumها از UserLoginType::parseLoginTypeMask(...)
مثال
use Dornica\AccessHub\Authentication\Enums\UserLoginType;

$mask = UserLoginType::composeLoginTypeMask([
UserLoginType::PASSWORD,
UserLoginType::OTP_EMAIL,
]);

$types = UserLoginType::parseLoginTypeMask($user->login_type);

$labels = collect($types)
->map(fn (UserLoginType $type) => __('user-management::fields.login_types.' . strtolower($type->name)))
->all();

Helperهای احراز هویت

اگر می‌خواهید flowهای احراز هویت را custom پیاده کنید، این helperها برای data access و flow control از methodهای config-like روی Authenticator مناسب‌تر هستند.

authenticator

نمونه‌ی سرویس Authenticator را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: Dornica\AccessHub\Authentication\Authenticator

مثال
$auth = authenticator();

authUser

کاربر احراز هویت‌شده را از guard فعال برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: mixed

مثال
$user = authUser();

authId

شناسه کاربر احراز هویت‌شده را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: int | string | null

مثال
$userId = authId();

authCheck

بررسی می‌کند کاربر فعلی احراز هویت شده است یا نه.

پارامترها:
ندارد

نوع خروجی: bool

مثال
if (authCheck()) {
// ...
}

authLogout

کاربر را از flow session-based یا token-based خارج می‌کند.

پارامترها:

نامنوعتوضیح
requestIlluminate\Http\Request nullاگر null باشد از request فعلی استفاده می‌شود

نوع خروجی: bool

مثال
authLogout(request());

authFieldNames

نام فیلدهای احراز هویت تعریف‌شده را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: array

مثال
$fields = authFieldNames(); // ['code', 'mobile']

authFieldDefinitions

تعریف کامل همه auth fieldها را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: array

مثال
$definitions = authFieldDefinitions();

authFieldDefinition

تعریف یک auth field خاص را برمی‌گرداند.

پارامترها:

نامنوعتوضیح
authFieldstringنام فیلد
defaultarrayخروجی پیش‌فرض اگر فیلد وجود نداشته باشد

نوع خروجی: array

مثال
$mobileRules = authFieldDefinition('mobile')['rules'] ?? [];

userMetaFieldGroups

همه گروه‌های meta field را برمی‌گرداند.

پارامترها:
ندارد

نوع خروجی: array

مثال
$groups = userMetaFieldGroups();

userMetaFields

meta fieldها را برای یک PersonType خاص یا برای همه گروه‌ها برمی‌گرداند.

پارامترها:

نامنوعتوضیح
personTypeDornica\AccessHub\Authentication\Enums\PersonType nullاگر null باشد همه گروه‌ها برگردانده می‌شود

نوع خروجی: array

مثال
use Dornica\AccessHub\Authentication\Enums\PersonType;

$realFields = userMetaFields(PersonType::REAL);