sanjabteam / baloot
Laravel 助手包,专为伊朗人设计
Requires
- php: ^7.3|^8.0
- cviebrock/eloquent-sluggable: ^8.0|^9.0|^10.0|^11.0
- hekmatinasser/verta: ^8.0
- illuminate/support: ^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^5.1 | ^6
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-29 11:08:00 UTC
README
为伊朗人设计的 Laravel 助手包
专为伊朗开发者设计的 Laravel 包
我总是有一系列代码,每次创建新项目时,都要从头开始复制粘贴到新项目中。后来我决定将其打包成一个包,这样我和我的同事都可以方便地使用。现在,如果你认为这个包可以加快你的软件开发流程,你也可以使用它。如果你认为这个包缺少专门针对伊朗开发者的某些功能,请务必
创建分支并提交 pull request
😁.
功能
- 在 Eloquent 中存储和恢复波斯历
- 使用波斯历进行查询条件设置
- 用于修复阿拉伯文 K 和 Y 字母以及波斯文和阿拉伯文数字的中介器
- 生成波斯文 slug 的函数
- 手机号码和固定电话号码验证器
- 伊朗城市和省份数据库以及路由绑定
- 根据卡号查找银行
- 安装
- 配置
- 存储和恢复波斯历
- 波斯历查询构建器
- 中介器
- 验证
- 省份和城市
- 路由绑定
- 与 Eloquent Sluggable 包一起使用
- 构建
- 安装此包需要 Laravel 版本 6 或更高。在 Laravel 项目中使用 composer 安装此包。
安装
然后使用以下命令创建配置文件。
composer require sanjabteam/baloot
在文件
php artisan vendor:publish --provider=Baloot\\BalootServiceProvider
配置
中您可以修改配置。
config/baloot.php
geo
: 如果您不想使用省份和城市功能,将此部分设置为
false
以防止创建相关表。
此包为您提供将 Laravel 模型中存在的日期轻松转换为 Verta 类的功能。要开始,将
存储和恢复波斯历
trait
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
为了更好地管理,请参阅 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
之外的可选字段,并且希望它支持此功能,只需将其转换为
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(); // همه کاربران به جز کاربران ایجاد شده در تاریخ مشخص
中介器
我在项目遇到的一个问题是波斯数字。比如,有人在注册时用波斯数字输入密码,但在登录时用英文字母输入,然后说密码错误,但实际上并不是。第二个问题是,比如管理员用波斯或阿拉伯字母输入某个东西,但网站上的用户使用阿拉伯语键盘和用ك,ي的阿拉伯字母搜索,在搜索时找不到东西,尽管实际上可以找到。为了解决这个问题,只需在文件
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)
这个插件从网站上获取图片
为您提供服务。
$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()
slug
如果您想在地址中使用省份和城市,请使用以下方法。
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是通过
生成的。因此,以这种方式打开地址。
/test/مازندران/آمل
.
如果您只想使用ID或只想使用slug,或者不接受两种情况,那么请使用以下代替
province
, city
。
city_by_id
: 通过ID获取城市
city_by_slug
: 通过slug获取城市
province_by_id
: 通过ID获取省份
province_by_slug
: 通过slug获取省份
省份: Province
城市: City
与 Eloquent Sluggable 包一起使用
正如您所知,在Laravel中,您可以使用函数
Str::slug('test test')
为地址创建slug,但如果您将波斯语传递给此函数
Str::slug('خونه ی مادربزرگه')
输出
"khonh-i-madrbzrgh"
似乎它试图将其转换为英语,但此包的str_to_slug
函数可以轻松管理波斯字母
str_to_slug('خونه ی مادربزرگه')
"خونه-ی-مادربزرگه"
通过卡号查找银行
只需在文件
config/sluggable.php
部分
method
写成这样。
'method' => 'str_to_slug',
构建
要使用卡号查找银行,请使用此函数。
find_bank_by_card_number("6037697531")
输出
[ "class" => "bsi", "name" => "بانک صادرات ایران", "card_prefix" => "603769", ]
类,类的名称基于此包。