
laravel 的 artisan 控制台命令(如 make:model、make:controller、make:migration 等)在生成新的类文件时,并非从零开始,而是使用预定义的“stub”文件作为模板。这些 stub 文件是带有占位符的骨架代码,artisan 会根据用户的输入填充这些占位符,最终生成完整的类文件。
通过发布这些内置的 Stub 文件,我们可以修改它们的默认内容,从而影响未来通过 Artisan 命令生成的所有相关代码。对于模型,我们关注的是 model.stub 文件。
要实现模型默认行为的自动化扩展,请遵循以下步骤:
首先,您需要将 Laravel 内置的 Stub 文件发布到您的应用程序目录中。这可以通过运行以下 Artisan 命令完成:
php artisan stub:publish
执行此命令后,Laravel 会在您的应用程序根目录下创建一个新的 stubs 文件夹(例如:your-project/stubs),并将所有内置的 Stub 文件复制到该目录中。其中,model.stub 就是我们需要修改的文件。
接下来,打开 stubs/model.stub 文件。在这个文件中,您可以添加任何您希望所有新模型都自动拥有的方法、属性、Trait 引用或接口实现。
以我们最初的目标为例,为所有模型自动添加 created_at 和 updated_at 的访问器,您可以将 model.stub 修改为以下内容:
<?php
namespace {{ namespace }};
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon; // 引入 Carbon 类,用于日期时间处理
class {{ class }} extends Model
{
use HasFactory;
/**
* 获取创建时间的格式化字符串。
*
* @param string $value
* @return string
*/
public function getCreatedAtAttribute($value)
{
// 确保 $value 是有效的日期字符串,然后使用 Carbon 进行格式化
return Carbon::parse($value)->format('Y-m-d H:i:s');
}
/**
* 获取更新时间的格式化字符串。
*
* @param string $value
* @return string
*/
public function getUpdatedAtAttribute($value)
{
// 确保 $value 是有效的日期字符串,然后使用 Carbon 进行格式化
return Carbon::parse($value)->format('Y-m-d H:i:s');
}
}代码说明:
完成 model.stub 的修改后,现在您可以尝试通过 Artisan 命令创建一个新的模型来验证效果:
php artisan make:model NewModelName
执行上述命令后,打开新生成的 app/Models/NewModelName.php 文件。您会发现,该文件已经自动包含了您在 model.stub 中添加的 getCreatedAtAttribute 和 getUpdatedAtAttribute 方法。
通过定制 Laravel 的 Stub 文件,我们可以实现对应用程序核心组件(如模型)的自动化、统一行为管理。这是一种强大且优雅的方式,可以显著提高代码质量、一致性和开发效率,是 Laravel 高级开发中值得掌握的关键技巧。它提供了一种在不引入额外继承复杂性的情况下,强制执行特定编码规范和功能默认化的有效途径。
以上就是Laravel 模型默认行为定制:利用 Stub 文件实现自动化扩展与统一管理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号