启动新的 Laravel 应用程序时使用 Model shouldBeStrict

所以您有一个全新应用程序的想法。安装 Laravel 后,您就可以开始了。你应该做的第一件事是什么? 对我来说,我打开应用程序服务提供程序并转到启动方法并设置全局Model::shouldBeStrict()

php 复制代码
public function boot(): void
{
    Model::shouldBeStrict();
}

打开此功能后,它会执行以下操作:

php 复制代码
public static function shouldBeStrict(bool $shouldBeStrict = true)
{
    static::preventLazyLoading($shouldBeStrict);
    static::preventSilentlyDiscardingAttributes($shouldBeStrict);
    static::preventAccessingMissingAttributes($shouldBeStrict);
}

这做了三件事:

  • 防止延迟加载
  • 它可以防止默默地丢弃属性。
  • 它可以防止访问丢失的属性。

防止延迟加载

这是延迟加载的示例。

php 复制代码
$articles = \App\Models\Article::get();
 
foreach ($articles as $article) {
     echo "<li>" . $article->user->name . "</li>\n";
}

如果您运行它,它将输出您期望的内容。但是,它会延迟加载用户关系,从而导致每个循环都有一个新查询。

打开shouldBeStrict而不是运行代码,您会收到一个错误,为您提供即时反馈:

Attempted to lazy load [user] on model [App\Models\Article] but lazy loading is disabled.

防止默默丢弃属性

下面是一个示例,显示尝试更新不可填充的属性:

$user->fill(["remember_token" => "bar"]);

现在这将返回一个异常:

Add fillable property [remember_token] to allow mass assignment on [App\Models\User].

防止访问丢失的属性。

假设我们正在尝试显示用户上可能不存在的属性:

{{ $user->nonexistant }}

默认情况下,Laravel 将不会显示任何内容,因为未找到该属性,但打开严格模式后,您会得到:

The attribute [nonexistant] either does not exist or was not retrieved for model [App\Models\User].

这在您可能犯拼写错误的情况下确实很有帮助,例如:

{{ $user->emial }} 现在,打开Model::shouldBeStrict()是我在每个应用程序上做的第一件事,它有助于防止我犯一些稍后可能对应用程序有害的基本错误。

相关推荐
吃饱了得干活42 分钟前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试
程序员爱钓鱼4 小时前
Go 开发环境安装(Windows、macOS、Linux)
后端·面试·go
触底反弹4 小时前
🤯 面试被问 AI Workflow 和 Agent 有啥区别?3 张图 + 2 段代码讲清楚!
人工智能·设计模式·面试
uzong11 小时前
一个好的面试官,应该让候选人感到被尊重
面试
触底反弹14 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
沉默王二16 小时前
腾讯一面,我霸气反问:“你说你们在做Agent项目,说说 SubAgent、Plan 模式、Skill 调用这些你们都是怎么做的?”面试官一直在擦汗。。
面试·agent·ai编程
程序员Rock20 小时前
上位机开发-MODBUS面试常见问题
c语言·c++·面试·职场和发展·上位机
PBitW1 天前
git 中容易遗忘的点 (二) ⚡⚡⚡
前端·git·面试
浩哥学JavaAI1 天前
2026年最新AI agent面试(07)_大模型架构基础
人工智能·面试·架构
PBitW1 天前
git 中容易遗忘的点 (三) 🚀🚀🚀
前端·git·面试