У меня есть Observer
, настроенный на прослушивание событий Model
, чтобы мой Controller
был чист от сообщений журнала.Моя реализация выглядит следующим образом:
Во-первых, метод 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()
.
Поэтому мой вопрос заключается в следующем: есть ли способ отловить, когда я специально использую сеанс Laravel tinker
для обработки своих моделей в Observer?учебный класс?