PHPackages                             miladtech/magic - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. miladtech/magic

ActiveLibrary

miladtech/magic
===============

Laravel helper package for iranians

v2.0.0(8mo ago)011MITPHPPHP ^7.3|^8.1|^8.2|^8.3

Since May 19Pushed 8mo ago1 watchersCompare

[ Source](https://github.com/mrmostafaei/magic)[ Packagist](https://packagist.org/packages/miladtech/magic)[ Docs](https://github.com/mrmostafaei/magic)[ RSS](/packages/miladtech-magic/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)Dependencies (5)Versions (4)Used By (0)

جادو
====

[](#جادو)

پکیج کمکی لاراول برای ایرانیان
------------------------------

[](#پکیج-کمکی-لاراول-برای-ایرانیان)

---

[![Latest Stable Version](https://camo.githubusercontent.com/8a1399ac5db79c7ba9b98783fce31a6fe2ef24fceee1e15ecab52daee0440c1e/68747470733a2f2f706f7365722e707567782e6f72672f6d696c6164746563682f6d616769632f762f737461626c65)](https://packagist.org/packages/miladtech/magic)[![Total Downloads](https://camo.githubusercontent.com/a315813cecf35711fbd257b07034493b75c0c531c139ca166c6eb3fbf7e31016/68747470733a2f2f706f7365722e707567782e6f72672f6d696c6164746563682f6d616769632f646f776e6c6f616473)](https://packagist.org/packages/miladtech/magic)[![License](https://camo.githubusercontent.com/415a2129deb337568d0b7a6feace6ba118c2f440caaad5cb7505c11dd5701e42/68747470733a2f2f706f7365722e707567782e6f72672f6d696c6164746563682f6d616769632f6c6963656e7365)](https://packagist.org/packages/miladtech/magic)

---

> پکیج لاراول مخصوص توسعه دهندگان ایرانی

امکانات:

- ذخیره و بازیابی تاریخ شمسی در الوکوئنت
- شرط گذاری روی کوئری با تاریخ شمسی
- میدلویر برای تعمیر حروف ک و ی عربی و اعداد فارسی و عربی
- تابع تهیه اسلاگ فارسی
- ولیدیتور شماره همراه و شماره تماس ثابت
- دیتابیس شهر ها و استان های ایران به همراه روت بایندینگ ها
- پیدا کردن بانک از روی شماره کارت

نصب
---

[](#نصب)

برای نصب شما به لاراول نسخه 6 یا بالاتر نیاز دارید. با استفاده از کومپوزر در پروژه لاراولی خود این پکیج رو نصب کنید.

```
composer require miladtech/magic
```

بعد هم با این کامند فایل کانفیگ رو بسازین.

```
php artisan vendor:publish --provider=MiladTech\\MagicServiceProvider
```

کانفیگ
------

[](#کانفیگ)

در فایل

```
config/magic.php

```

میتونین کانفیگ رو تغییر بدین.

`geo`: اگه نمیخاین از قابلیت استان و شهر استفاده کنین مقدار این قسمت رو برابر

`false`

قرار بدید تا جداولش ایجاد نشه.

ذخیره و بازیابی تاریخ شمسی
--------------------------

[](#ذخیره-و-بازیابی-تاریخ-شمسی)

این پکیج این امکان رو به شما میده تا به راحتی تاریخ های موجود در مدل لاراول رو به راحتی به کلاس [ورتا](https://github.com/hekmatinasser/verta) تبدیل کنید. برای شروع

trait

`MiladTech\EloquentHelper`

رو به مدلی که میخاین اضافه کنین.

```
use MiladTech\EloquentHelper;

class User extends Model
{
    use EloquentHelper; // trait
}
```

بعد به راحتی میتونین به صورت شمسی به مشخصات دسترسی داشته باشین. فقط کافیه به فیلد مورد نظرتون پسوند

`_fa`

اضافه کنید.

```
$user = User::where(...)->first();
$user->created_at_fa // به صورت کلاس Hekmatinasser\Verta\Verta
$user->created_at_fa_f // 1390/1/1
$user->created_at_fa_ft // 1390/1/1 12:00
$user->created_at_fa_ftt // 1390/1/1 12:00:00
$user->updated_at_fa->format("%B %d %Y") // فروردین 01 1390
```

برای مدیریت بهتر میتونین به مستندات [ورتا](https://github.com/hekmatinasser/verta).مراجعه کنین همچنین با تنظیم کردن تاریخ هم از همین روش استفاده کنین.

```
$user->created_at_fa = Verta::createJalaliDate(1390, 1, 1);
dd($user->created_at); // Illuminate\Support\Carbon { date: 2011-03-21 }
$user->created_at_fa = "1392/1/1";
dd($user->created_at); // Illuminate\Support\Carbon { date: 2013-03-21 }
$user->created_at_fa = "1395/1/1 14:22:11";
dd($user->created_at); // Illuminate\Support\Carbon { date: 2016-03-20 14:22:11 }
```

### استفاده از اتریبیوت های دلخواه

[](#استفاده-از-اتریبیوت-های-دلخواه)

اگه میخاین یه فیلد دلخواه به جز

created\_at, updated\_at

داشته باشین که از همین قابلیت پشتیبانی کنه کافیه اون رو به تاریخ [کست](https://laravel.com/docs/9.x/eloquent-mutators#date-casting) کنین.

```
use MiladTech\EloquentHelper;

class User extends Model
{
    use EloquentHelper;

    protected $casts = [
        'birth_date' => 'date',
        // یا
        'released_at' => 'datetime'
    ];
}
```

و بازم هم به همون روش میتونین بهش دسترسی داشته باشین.

```
$user->birth_date_fa; // Hekmatinasser\Verta\Verta
```

کوئری بیلدر تاریخ شمسی
----------------------

[](#کوئری-بیلدر-تاریخ-شمسی)

این دستورات کمک میکنن بر روی ستون های از نوع date/datetime شرط با تاریخ شمسی بذارین.

### whereJalali

[](#wherejalali)

شرط با یک تاریخ و زمان به خصوص شمسی

```
User::whereJalali('created_at', '1399/01/15 14:00:00')->get();
// یا
User::whereJalali('created_at', Verta::createJalali(1399,01,15, 14, 0, 0))->get();
// شرط با عملگر
User::whereJalali('created_at', '>', '1399/01/15 14:00:00')->get();
```

### whereDateJalali

[](#wheredatejalali)

شرط با یک تاریخ به خصوص شمسی

```
User::whereDateJalali('created_at', '1399/01/15')->get();
// یا
User::whereDateJalali('created_at', Verta::createJalaliDate(1399,01,15))->get();
// شرط با عملگر
User::whereDateJalali('created_at', '>', '1399/01/15')->get();
```

### whereInMonthJalali

[](#whereinmonthjalali)

شرط یک ماه خاص شمسی در یک سال

```
User::whereInMonthJalali('created_at', 3)->get(); // فقط کاربران ایجاد شده در خرداد ماه سال جاری

User::whereInMonthJalali('created_at', 3, 1397)->get(); // فقط کاربران ایجاد شده در خرداد ماه سال 1397
```

### whereInYearJalali

[](#whereinyearjalali)

شرط یک سال خاص شمسی

```
User::whereInYearJalali('created_at')->get(); // فقط کاربران ایجاد شده در سال جاری

User::whereInYearJalali('created_at', 1397)->get(); //فقط کاربران ایجاد شده در سال 1397
```

### whereBetweenJalali

[](#wherebetweenjalali)

شرط بین دو تاریخ مشخص شمسی

```
User::whereBetweenJalali('created_at', ['1400/03/26 12:00:00', '1400/05/26 12:00:00'])->get(); // فقط کاربران ایجاد شده بین دو تاریخ مشخص شده
// یا
User::whereBetweenJalali('created_at', [Verta::createJalali(1400,01,15, 14, 0, 0), Verta::createJalali(1399,01,15, 14, 0, 0)])->get();
// شرط با Not
User::whereNotBetweenJalali('created_at', ['1400/03/26 12:00:00', '1400/05/26 12:00:00'])->get(); // همه کاربران به جز کاربران ایجاد شده در تاریخ مشخص
```

میدلویر
-------

[](#میدلویر)

یکی از مشکلاتی که تو پروژه ها سر و کله میزنم باهاشون یکی اعداد فارسی هست. مثلا طرف میاد موقع ثبت نام رمز عبورش رو با عدد فارسی میزنه بعد موقع ورود با عدد انگلیسی بعد این وسط میگه رمز عبورش اشتباهه درصورتی که اینطوری نیست. مشکل دوم اینه که مثلا ادمین یه چیزی با ک و ی فارسی وارد میکنه اما یه کاربری تو سایت کیبوردش عربی و با ك,ي عربی سرچ میکنه و این وسط موقع سرچ چیزی پیدا نمیکنه در صورتی که اینطور نیستش. برای حل این مشکل کافیه در فایل

`app/Http/Kernel.php`

کلاس

```
\MiladTech\Middleware\FixRequestInputs
```

به آرایه

middleware

اضافه کنین

```
protected $middleware = [
    ...
    \MiladTech\Middleware\FixRequestInputs::class,
];
```

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

ولیدیشن
-------

[](#ولیدیشن)

iran\_phone: برای وارد کردن شماره های ثابت ایرانی

iran\_mobile: برای ولیدیشن شماره موبایل های ایرانی

> در صورتی که میخواید شماره هایی که بدون صفر هم وارد میشن رو بپذیره, به این صورت وارد کنید : iran\_mobile:true در غیر این صورت اگر صفر وارد نشه شماره تایید نمیشه.

برای استفاده:

```
public function test(Request $request)
{
    $request->validate([
        'mobile1' => 'required|iran_mobile',
        'phone' => 'required|iran_phone',
        'mobile2' => 'required|iran_mobile:true', // وارد کردن صفر در اول شماره اختیاری
    ]);
}
```

> این قسمت نیاز به بهبود دارد

iran\_national\_code: ولیدیشن کد ملی

فیکر
----

[](#فیکر)

برای فیکر یه سری بهبود ها انجام شده برای مثال paragraph فارسی سازی شده.

CustomImage:

```
customImage($path, $width, $height, $prefix)
```

این فیکر عکس از سایت

براتون فراهم میکنه.

$path: پوشه محل ذخیره $width: طول عکس $height: عرض عکس $prefix: به طور پیشفرض فقط نام عکس بهتون داده میشه با کمک این میتونین یه پیشوند به اسم عکس اضافه کنین

نمونه:

```
'image' => $faker->customImage(public_path('uploads/fake'), 640, 480, 'fake/')
```

همچنین اگه میخاین یه آرایه از عکس داشته باشین

```
$faker->customImages(public_path('uploads/fake'), 640, 480, $faker->numberBetween(1, 3), 'fake/')
```

چهارمین پارامتر تعداد عکس هایی که لازم دارین رو ازتون دریافت میکنه.

iranMobile:

یه شماره موبایل ایرانی براتون میسازه

```
$faker->iranMobile
```

iranPhone:

یه شماره ثابت ایرانی براتون میسازه

```
$faker->iranPhone
```

استان ها و شهرها
----------------

[](#استان-ها-و-شهرها)

برای شروع در

`DatabaseSeeder.php`

این قسمت رو اضافه کنید.

```
public function run()
{
    $this->call(\MiladTech\Database\CitiesTableSeeder::class); // سیدر شهر ها و استان ها
}
```

سپس بعد از میگریت سید رو انجام بدین.

```
php artisan migrate --seed
```

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

مدل استان: `MiladTech\Models\Province`

مدل شهر: `MiladTech\Models\City`

نمونه:

```
use MiladTech\Models\City;

City::where('name', 'آمل')->first()
```

### روت بایندینگ

[](#روت-بایندینگ)

اگه میخاین از استان و شهر در آدرس ها استفاده کنین از این روش استفاده کنین.

```
use MiladTech\Models\Province;
use MiladTech\Models\City;

Route::get('test/{province}/{city}', function (Province $province, City $city) {
    abort_if($city->province_id != $province->id, 404);
    // ...
});
```

و سپس آدرس زیر رو باز کنید.

`/test/27/1068`

حالا به استان و شهر دسترسی دارین.

اگه میخاین آدرستون

seo freindly

باشه از

slug

موجود در شهر ها و استان ها استفاده کنین. این اسلاگ ها به کمک

[Eloquent Sluggable](https://github.com/cviebrock/eloquent-sluggable)

تهیه شدن. بنابراین آدرس رو به این شکل باز کنین.

`/test/مازندران/آمل`.

اگه فقط میخاین با آی دی باز باشه یا فقط اسلاگ و هر دو حالت رو قبول نکنه در اون صورت از این ها به جای

`province`, `city`

استفاده کنین.

`city_by_id`: شهر با آی دی

`city_by_slug`: شهر با اسلاگ

`province_by_id`: استان با آی دی

`province_by_slug`: استان با اسلاگ

استان: [Province](./src/Models/Province.php)

شهر: [City](./src/Models/City.php)

اسلاگ
-----

[](#اسلاگ)

همونطور که میدونین در لاراول با تابع

```
Str::slug('test test')
```

میشه یه اسلاگ برای آدرس دهی درست کرد اما اگه فارسی به این تابع بدین

```
Str::slug('خونه ی مادربزرگه')
```

خروجی

`"khonh-i-madrbzrgh"`

میده که یه جورایی سعی کرده به فینگلیش تبدیلش کنه اما با تابع `str_to_slug`این پکیج به راحتی حروف فارسی رو هم مدیریت میکنه

```
str_to_slug('خونه ی مادربزرگه')
```

`"خونه-ی-مادربزرگه"`

### استفاده با پکیج Eloquent Sluggable

[](#استفاده-با-پکیج-eloquent-sluggable)

کافیه در فایل

`config/sluggable.php`

قسمت

method

رو این شکلی بنویسین.

```
'method' => 'str_to_slug',
```

پیداکردن بانک از روی شماره کارت
-------------------------------

[](#پیداکردن-بانک-از-روی-شماره-کارت)

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

```
find_bank_by_card_number("6037697531")
```

خروجی:

```
[
    "class" => "bsi",
    "name" => "بانک صادرات ایران",
    "card_prefix" => "603769",
]
```

بهبود یافته شده با کمک
----------------------

[](#بهبود-یافته-شده-با-کمک)

- [Eloquent Sluggable](https://github.com/cviebrock/eloquent-sluggable)
- [MiladTech](https://milad-tech.com)
- [TestBench](https://github.com/orchestral/testbench)
- [Verta](https://github.com/hekmatinasser/verta)

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance65

Regular maintenance activity

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~420 days

Total

3

Last Release

246d ago

Major Versions

v1.5.0 → v2.0.02025-09-05

PHP version history (2 changes)v1.4.0PHP ^7.3|^8.1

v2.0.0PHP ^7.3|^8.1|^8.2|^8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/8f3a9358169a6b591d9d9b3897e5a12f7e6b07797d065e7ecb2794c0c46aa7e3?d=identicon)[miladtech](/maintainers/miladtech)

---

Top Contributors

[![mrmostafaei](https://avatars.githubusercontent.com/u/35763837?v=4)](https://github.com/mrmostafaei "mrmostafaei (5 commits)")

---

Tags

laravelhelpersmiladtech

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/miladtech-magic/health.svg)

```
[![Health](https://phpackages.com/badges/miladtech-magic/health.svg)](https://phpackages.com/packages/miladtech-magic)
```

###  Alternatives

[laravel/helpers

Provides backwards compatibility for helpers in the latest Laravel release.

80660.2M455](/packages/laravel-helpers)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
