我Observer
设置了 Listen to aModel
的事件,以保持我Controller
的 Logging 消息清洁。我的实现如下:
首先,一个 store 方法可以做它应该做的事情。从有效参数创建并保存新模型。
# app/Http/Controllers/ExampleController.php
namespace App\Http\Controllers;
use App\Http\Requests\StoreExample;
use App\Example;
class ExampleController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
/**
* Create and save an Example from validated form parameters.
* @param App\Http\Requests\StoreExample $request
*/
public function store(StoreExample $request)
{
Example::create($request->validated());
return back();
}
}
StoreExample
表单请求并不重要。它只是验证并检查一个门以授权该操作。
我Observer
已设置记录此操作。
# app/Observers/ExampleObserver.php
namespace App\Observers;
use App\Example;
class ExampleObserver
{
public function created(Example $example): void
{
\Log::info(auth()->id()." (".auth()->user()->full_name.") has created Example with params:\n{$example}");
}
}
我遇到的问题是我的日志取决于auth()
要设置的对象的方式。考虑到auth
中间件和为了存储示例而必须检查的门,来宾用户不可能触发此代码。
但是,我确实喜欢tinker
在我的本地和临时环境中使用来检查站点的行为,但这可能会引发错误(嗯,PHP notice
更准确地说),因为我可以Example
在没有经过身份验证的情况下创建模型,并且记录器将尝试获取full_name
来自非对象的属性auth()->user()
。
所以我的问题如下:当我专门使用 Laraveltinker
会话来处理 Observer 类中的模型时,有没有办法捕捉到?