所以您有一个全新应用程序的想法。安装 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()
是我在每个应用程序上做的第一件事,它有助于防止我犯一些稍后可能对应用程序有害的基本错误。