が良くわからなかったので追ってみた。
ざっとBreakpointを設置して
<?php class FormRequestServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { $this->app->afterResolving(ValidatesWhenResolved::class, function ($resolved) { $resolved->validateResolved(); });
の $resolved->validateResolved();で登録しているみたい。GETメソッドの場合は個々を実行せず、PATCHメソッドの時はこの部分を実行していた。
$this->app->afterResolving() の実装
このメソッドを追ってみるとsrc/Illuminate/Container/Container.php の
<?php class Container implements ArrayAccess, ContainerContract { public function afterResolving($abstract, Closure $callback = null) { if (is_string($abstract)) { $abstract = $this->getAlias($abstract); } if ($abstract instanceof Closure && is_null($callback)) { $this->globalAfterResolvingCallbacks[] = $abstract; } else { $this->afterResolvingCallbacks[$abstract][] = $callback; } }
だったんだけど、こっからよくわかんなかった…