hsyir/baloot

Laravel 适用于伊朗人的助手包

3.1.0 2023-03-29 15:06 UTC

This package is auto-updated.

Last update: 2024-09-29 18:06:53 UTC


README

为伊朗人设计的 Laravel 辅助包

Latest Stable Version Total Downloads Build Status Code Style Code Style License

专为伊朗开发者设计的 Laravel 包

我有一系列代码,每次创建新项目时都会从零开始复制到新项目。后来我决定将其作为一个包发布,以便我自己和我的同事可以轻松使用。现在,如果您认为这个包可以加快您的软件开发流程,请使用它。如果您认为这个包缺少针对伊朗开发者的特定功能,请务必

进行分支和拉取请求

😁。

功能

  • 在活动中存储和恢复波斯历日期
  • 在查询中使用波斯历日期进行条件判断
  • 用于修复阿拉伯语和波斯语字母以及数字的 Midlware
  • 生成波斯语标题的函数
  • 手机号码和固定电话号码的验证器
  • 包含伊朗城市和省份数据库以及路由绑定
  • 通过卡号查找银行

安装

您需要一个 Laravel 6 或更高版本才能安装此包。使用 Composer 在您的 Laravel 项目中安装此包。

composer require sanjabteam/baloot

然后使用以下命令创建配置文件。

php artisan vendor:publish --provider=Baloot\\BalootServiceProvider

配置

在文件中

config/baloot.php

您可以更改配置。

geo:如果您不希望使用省份和城市功能,则将此部分设置为

false

以防止创建相关表格。

存储和恢复波斯历日期

此包允许您轻松地将 Laravel 模型中的现有日期转换为ورتا 类。要开始

特派团

Baloot\EloquentHelper

添加到您想要添加的模型中。

use Baloot\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

有关更多信息,请参阅ورتا 文档。此外,您还可以使用相同的方法设置日期。

$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

支持此功能,只需将其转换为日期铸造即可。

use Baloot\EloquentHelper;

class User extends Model
{
    use EloquentHelper;

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

然后您可以使用相同的方法访问它。

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

波斯历查询构建器

这些命令可以帮助您在日期/日期时间类型的列上设置波斯历条件。

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

对特定波斯历日期设置条件

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

在特定波斯历年份中的特定月份设置条件

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

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

whereInYearJalali

对特定波斯历年份设置条件

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

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

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(); // همه کاربران به جز کاربران ایجاد شده در تاریخ مشخص

Midlware

在项目中遇到的一个问题是关于波斯数字。例如,有人在注册时用波斯数字设置密码,而在登录时用英文字母,然后中间说密码错误,其实并不是这样。第二个问题是,例如管理员用波斯语和阿拉伯语输入某些内容,但是网站上的一位用户使用阿拉伯语键盘和阿拉伯语中的ك,ي搜索,结果在搜索时找不到东西,其实并不是这样。为了解决这个问题,只需在文件

app/Http/Kernel.php

\Baloot\Middleware\FixRequestInputs

将以下数组分

middleware

添加即可

protected $middleware = [
    ...
    \Baloot\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: 验证身份证号码

虚构

为了进行改进,已经做了一些改进,例如段落已进行波斯语化。

CustomImage

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

此插件从网站

https://picsum.photos

为您提供了。

$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(\Baloot\Database\CitiesTableSeeder::class); // سیدر شهر ها و استان ها
}

然后执行迁移后,进行数据填充。

php artisan migrate --seed

现在您的城市和省份表已经填充了数据,您可以使用以下模型进行使用。

省份模型: Baloot\Models\Province

城市模型: Baloot\Models\City

示例

use Baloot\Models\City;

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

路由绑定

如果您想在地址中使用省份和城市,请使用以下方法。

use Baloot\Models\Province;
use Baloot\Models\City;

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

然后打开以下地址。

/test/27/1068

现在您可以访问省份和城市。

如果您想使地址

SEO友好

可以使用

slug

城市和省份中的slug。这些slug是通过

Eloquent Sluggable

生成的。因此,打开以下地址。

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

如果只想通过ID打开,或者只接受slug,或者两者都不接受,那么在这种情况下,请使用以下代替

province, city

使用。

city_by_id: 通过ID获取城市

city_by_slug: 通过slug获取城市

province_by_id: 通过ID获取省份

province_by_slug: 通过slug获取省份

省份: Province

城市: City

标题

正如您所知,在Laravel中,可以使用函数

Str::slug('test test')

创建一个用于地址的slug,但是如果向这个函数传入波斯语,它会尝试将其转换为英语,但是这个包的str_to_slug函数可以轻松管理波斯语字母

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

输出

"khonh-i-madrbzrgh"

这似乎试图将其转换为英语,但是使用此包的str_to_slug函数可以轻松管理波斯语字母

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

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

与 Eloquent Sluggable 包一起使用

只需在文件

config/sluggable.php

部分

method

按照以下方式编写。

'method' => 'str_to_slug',

通过卡号查找银行

要使用卡号查找银行,请使用此函数。

find_bank_by_card_number("6037697531")

输出

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

类, 类名基于 此包

制作