【问题标题】:Best practice of extending Laravel Base Model Class [closed]扩展 Laravel 基础模型类的最佳实践
【发布时间】:2021-10-20 17:05:39
【问题描述】:

我们想在应用程序的每个模型上为 created_at 和 updated_at 添加 get()Attribute 方法。因此,一种方法当然是编写一个新的 BaseModel 类,并让所有模型都扩展该类而不是默认模型。

有没有(更好的)方法可以在不使用新的 BaseModel 类的情况下做到这一点?

目标是让创建不使用这些方法的新模型成为不可能。

【问题讨论】:

  • Model 类是“供应商代码”,这意味着如果你想直接修改它,你可以,但是如果你更新了 Laravel 的版本,更改将丢失。创建一个新的class BaseModel extends Model,然后将你的模型基于这个class ExampleModel extends BaseModel,这可能是解决这个问题的最好方法。我不确定在这种情况下“更好”(这是一个任意词,可能意味着任何东西)会是什么样子。只要您作为开发人员确保所有新模型都在扩展您的 BaseModel 类,一切都很好。
  • 感谢您的回答,“更好”是指某种最佳实践,以防我不知道。编辑供应商 ofc 不是一种选择
  • 没问题????不,在我看来,你有正确的方法。您可以也许通过模型测试来强化这种做法,确保所有模型都基于BaseModel 而不是Model,但这感觉有点过头了。
  • 好的,太好了!我想我会尽量不要忘记它,并且可能会过度考虑测试想法;)

标签: php laravel eloquent


【解决方案1】:

您可以使用命令 php artisan stub:publish 来自定义您的默认模型、控制器、迁移...

运行该命令后,Laravel 会在 App/Stubs 文件夹中添加一堆文件。只需在相应的已发布存根文件 (model.stub) 中创建一个新的自定义方法。

或阅读下面的描述以获取更多详细信息:

存根自定义 Artisan 控制台的 make 命令用于创建各种类,例如控制器、作业、迁移和测试。这些类是使用“存根”文件生成的,这些文件根据您的输入填充了值。但是,您可能希望对 Artisan 生成的文件进行少量更改。为此,您可以使用 stub:publish 命令将最常见的存根发布到您的应用程序,以便您可以自定义它们:

来源:https://laravel.com/docs/8.x/artisan#stub-customization

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多