Я хотел бы изучить поведение пользователей, записав в конкретной таблице базы данных любые действия, выполненные пользователями (user, timestamp, [имя контроллера и метода] или [url и метод запроса]).
это нить имеет дело с похожим вопросом, но, кажется, слушает три метода; Я бы предпочел более глобальное решение.
Итак, вот что я попробовал до сих пор:
global.php
Event::listen('*', function(){
$action = Event::firing();
App::make('SpyController')->spy($action);
});
SpyController.php
class SpyController extends BaseController {
public function spy($action){
$spy = new Spy();
$spy->name=$action;
$spy->user_id=Auth::user()->id;
$spy->save();
}
}
При этом я получаю ошибку тайм-аута. Я думаю, что есть слишком много вещей, чтобы слушать, и я должен лучше ограничить выбор контроллеров. Тем не менее, я не понимаю, как слушать конкретные контроллеры. В документации представлен пример с auth.login
, Если я правильно понял, это означает model.method
, Можно ли слушать controller.method
?
Ошибка тайм-аута, я думал, потому что у вас есть контроллер LogController вместо SpyController
auth.login, auth.attempt, router. * являются встроенными в laravel src и запускаются диспетчером.
Таким образом, если вам нужно создать список для контроллеров, вы можете создать промежуточное программное обеспечение, которое будет запускать событие с чем угодно.
Например:
Зарегистрированное имя промежуточного программного обеспечения — spylogs.
Метод обработки (в промежуточном программном обеспечении):
public function handle($request, Closure $next)
{
$method = $request->method();
Event::fire('some_name.'.$method);
return $next($request);
}
В контроллере:
$this->middleware('spylogs');
Где угодно:
Event::listen('some_name.method_name', callback);
Других решений пока нет …