awobaz / eloquent-mutators
为 Laravel 5 的 Eloquent 提供可重用的访问器和修改器(获取器/设置器)
Requires
- php: ^7.1|^8.0
- illuminate/cache: ~5.4|~6.0|~7.0|~8.0|~9.0|~10.0|~11.0
- illuminate/console: ~5.4|~6.0|~7.0|~8.0|~9.0|~10.0|~11.0
- illuminate/database: ~5.4|~6.0|~7.0|~8.0|~9.0|~10.0|~11.0
- illuminate/support: ~5.4|~6.0|~7.0|~8.0|~9.0|~10.0|~11.0
- laravel/helpers: ^1.5
Requires (Dev)
- fakerphp/faker: ^1.8
- laravel/laravel: ~5.4|~6.0|~7.0|~8.0|~9.0|~10.0|~11.0
- phpunit/phpunit: ~5.4|~6.0|~7.0|~8.0|~9.0|~10.0|~11.0
Suggests
- awobaz/blade-active: Blade directives for the Laravel 'Active' package
- awobaz/compoships: Multi-columns relationships for Laravel 5's Eloquent
- awobaz/eloquent-auto-append: Automatically append accessors to model serialization
- awobaz/syntactic: Syntactic sugar for named and indexed parameters call.
- dev-master
- 1.0.22
- 1.0.21
- 1.0.20
- 1.0.19
- 1.0.18
- 1.0.17
- 1.0.16
- 1.0.15
- 1.0.14
- 1.0.13
- 1.0.12
- 1.0.11
- 1.0.10
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/composer/guzzlehttp/psr7-2.5.0
- dev-dependabot/composer/symfony/http-kernel-6.0.20
- dev-dependabot/composer/guzzlehttp/guzzle-7.4.5
This package is auto-updated.
Last update: 2024-09-03 17:28:59 UTC
README
Eloquent 修改器 允许我们在 Eloquent 模型外部定义访问器和修改器。这使我们能够在任何模型或同一模型的任何属性上组织并重用它们。
问题
Eloquent 支持 访问器和修改器。然而,它要求我们直接在模型中定义它们。如果我们想在其他模型中重用访问器/修改器逻辑呢?或者,如果我们想重用同一模型其他属性的访问器/修改器逻辑呢?我们做不到!Eloquent 修改器 旨在解决这个限制。
相关讨论
安装
安装 Eloquent 修改器 的推荐方式是通过 Composer
$ composer require awobaz/eloquent-mutators
如果你使用 Laravel 5.5+,该包将自动注册自己。对于 Laravel 5.4,你必须手动注册该包
- 打开你的
config/app.php
文件,并将以下内容添加到providers
数组中
Awobaz\Mutator\MutatorServiceProvider::class,
- 在相同的
config/app.php
文件中,将以下内容添加到aliases
数组中
'Mutator' => Awobaz\Mutator\Facades\Mutator::class,
注意: Eloquent 修改器 需要 Laravel 5.4+。
安装后,使用 mutators:install
Artisan 命令发布资产。主要配置文件位于 config/mutators.php
。安装还会发布和注册 app/Providers/MutatorServiceProvider.php
。在此服务提供程序中,您可以注册自定义访问器/修改器扩展。
php artisan mutators:install
使用
使用 Awobaz\Mutator\Database\Eloquent\Model
类
只需使您的模型类继承自 Awobaz\Mutator\Database\Eloquent\Model
基类即可。Awobaz\Mutator\Database\Eloquent\Model
扩展了 Eloquent
基类,而不会更改其核心功能。
使用 Awobaz\Mutator\Mutable
特性
如果您无法从 Awobaz\Mutator\Database\Eloquent\Model
继承模型,您可以利用 Awobaz\Mutator\Mutable
特性。只需在您的模型中使用此特性即可。
语法
配置您的模型后,您可以为其属性配置访问器和修改器。
定义访问器
对于以下 Post 模型,我们为 title
和 content
属性配置了去除前后空白的访问器
namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { use \Awobaz\Mutator\Mutable; protected $accessors = [ 'title' => 'trim_whitespace', 'content' => 'trim_whitespace', ]; }
如您所见,我们在模型上使用了一个名为 accessors
的数组属性来配置其 访问器。数组的每个键代表一个属性的名称,值指向一个或多个访问器。要应用多个访问器,请传递一个数组作为值(访问器将按指定顺序应用)
namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { use \Awobaz\Mutator\Mutable; protected $accessors = [ 'title' => ['trim_whitespace', 'capitalize'], 'content' => ['trim_whitespace', 'remove_extra_whitespace'], ]; }
定义修改器
要定义修改器,请使用名为 mutators
的数组属性。
namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { use \Awobaz\Mutator\Mutable; protected $mutators = [ 'title' => 'remove_extra_whitespace', ]; }
注意: 用于访问器和修改器的属性名称可以在
config/mutators.php
配置文件中分别配置。
定义访问器/修改器扩展
在前面的示例中,我们使用了该包提供的访问器/修改器。您还可以使用Mutator
门面中的extend
方法注册访问器/修改器扩展。extend
方法接受访问器/修改器的名称和一个闭包。
<?php
namespace App\Providers;
use Awobaz\Mutator\Facades\Mutator;
use Illuminate\Support\ServiceProvider;
class MutatorServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//Register your custom accessors/mutators extensions here.
Mutator::extend('extension_name', function($model, $value, $key){
//DO STUFF HERE AND RETURN THE VALUE
});
}
}
如您所见,模型($model)、属性值($value)和属性名称($key)被传递到闭包中,这使得您能够访问模型的其它属性来计算并返回所需的值。
额外参数
您还可以为扩展定义额外的参数。这为我们实现了动态访问器/修改器的灵活性。
<?php
namespace App\Providers;
use Awobaz\Mutator\Facades\Mutator;
use Illuminate\Support\ServiceProvider;
class MutatorServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//The following extension is an implementation for str_replace
Mutator::extend('str_replace', function ($model, $value, $key, $search, $replace) {
return str_replace($search, $replace, $value);
});
}
}
在上面的示例中,模型($model)、属性值($value)、属性名称($key)和两个额外的参数被传递到闭包中。
应用此扩展,我们可以使用以下语法
namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { use \Awobaz\Mutator\Mutable; protected $accessors = [ 'content' => ['str_replace' => ['one', 'two']] //OR //'content' => 'str_replace:one,two' ]; }
这将把content
属性的每个one替换为two。
内置访问器/修改器
小写
大写
首字母大写
单词首字母大写
去除空白字符
驼峰式
蛇形
短横线式
大驼峰式
标题式
复数
单数
URL化
去除额外空白字符
preg_replace:pattern,replacement[,limit]
小写
将属性转换为小写。
大写
将属性转换为大写。
首字母大写
将属性的首个字符转换为大写。
单词首字母大写
将属性中每个单词的首个字符转换为大写。
去除空白字符
去除属性的首尾空白字符。
驼峰式
将属性转换为驼峰式。
蛇形
将属性转换为蛇形。
大驼峰式
将属性转换为大驼峰式。
短横线式
将属性转换为短横线式。
标题式
将属性转换为标题式。
复数
将属性转换为复数形式(仅支持英语)。
单数
将属性转换为单数形式(仅支持英语)。
URL化
将属性转换为URL友好的“slug”形式。
去除额外空白字符
去除属性中的额外空白字符。
preg_replace:pattern,replacement[,limit]
在属性上执行正则表达式搜索和替换。
版本管理
我们使用SemVer进行版本管理。有关可用的版本,请参阅此存储库上的标签。
单元测试
为了运行测试套件,安装开发依赖项
$ composer install --dev
然后,运行以下命令
$ vendor/bin/phpunit
作者
- Claudin J. Daniel - 初始工作
贡献
请阅读CONTRIBUTING.md,了解我们的行为准则以及提交拉取请求的流程。
赞助商
- Awobaz - 加拿大蒙特利尔的Web/移动代理机构
许可
Eloquent Mutators采用MIT许可。