Laravel 自定义 Casts 包
发布于 作者: Paul Redmond
由 Vladimir Ković 开发的 Laravel 自定义 Casts 包允许您在 Eloquent 模型中创建自己的自定义 Cast 类型。
Laravel 自定义 Casts 的工作方式类似于 Laravel 属性 Cast,但使用我们自定义的逻辑(在单独的类中)。除了 Cast 到我们复杂的类型之外,此包还使我们能够监听和响应底层模型事件。
以下是一个使用自定义 Cast 类的模型示例。
namespace App; use App\CustomCasts\NameCast;use Illuminate\Database\Eloquent\Model;use Vkovic\LaravelCustomCasts\HasCustomCasts; class User extends Model{ use HasCustomCasts; protected $casts = [ 'is_admin' => boolean // <-- Laravel default cast type 'name' => NameCast::class // <-- Our custom cast class (follow section below) ];}
考虑到上述模型,以下是自定义 Cast 类的示例。
namespace App\CustomCasts; use Vkovic\LaravelCustomCasts\CustomCastBase; class NameCast extends CustomCastBase{ public function setAttribute($value) { return ucwords($value); } public function castAttribute($value) { return $this->getTitle() . ' ' . $value; } protected function getTitle() { return ['Mr.', 'Mrs.', 'Ms.', 'Miss'][rand(0, 3)]; }}
$value
在 setAttribute()
方法中的值是我们要存储的原始数据库值。此包还允许您处理模型事件并响应这些事件。
您可以在 GitHub 上的 vkovic/laravel-custom-casts 上了解有关此包的更多信息,获取完整的安装说明,并查看源代码。