Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

266
Views
¿Cómo acceder a los parámetros de ruta desde un servicio etiquetado como monolog.processor?

Usando Symfony 4.4, me gustaría agregar sobre la marcha a todos mis parámetros de ruta si se encuentran en la solicitud. Por ejemplo, para la identificación de usuario:

 PUT | DELETE | POST mywebsite.com/users/{userid}/some-action

Podría agregar mis identificaciones de usuario cada vez que inicie sesión, pero es un poco engorroso.

Así que creé un servicio:

 //src/ // |__Services/ // |___UserProcessor.php use Monolog\Processor\ProcessorInterface; use Symfony\Component\HttpFoundation\RequestStack; // In my config.yaml this monolog.processor final class UserProcessor implements ProcessorInterface { private RequestStack $requestStack; public function __construct(RequestStack $requestStack) { $this->requestStack = $requestStack; } public function __invoke(array $record): array { dd($this->requestStack->getMasterRequest()->attributes); } }

Cuando ejecuto mi cartero en POST /users/{userid}/some-action obtengo este resultado:

 [ "media_type" => "application/json" ]

Según tengo entendido, los atributos de solicitud de parámetros de ruta de Symfony aún no se crean en el momento en que se ejecuta mi procesador.

¿Qué debo hacer para que mi procesador acceda al atributo ID de userid ?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Comprueba cómo lo hace Symfony\Bridge\Monolog\Processor\RouteProcessor :

Está implementado como EventSubscriber

 class RouteProcessor implements EventSubscriberInterface, ResetInterface { private $routeData; private $includeParams; public function __construct(bool $includeParams = true) { $this->includeParams = $includeParams; $this->reset(); } public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => ['addRouteData', 1], KernelEvents::FINISH_REQUEST => ['removeRouteData', 1], ]; } // rest of the implementation }

Durante KernelEvents::REQUEST , agrega los datos de solicitud necesarios (incluidos los parámetros de solicitud, si así se desea) al estado interno del objeto, de modo que cuando se ejecuta el procesador puede acceder a los datos del RouteProcessor::$routeData , y no de la solicitud directamente.

 public function addRouteData(RequestEvent $event) { if ($event->isMainRequest()) { $this->reset(); } $request = $event->getRequest(); if (!$request->attributes->has('_controller')) { return; } $currentRequestData = [ 'controller' => $request->attributes->get('_controller'), 'route' => $request->attributes->get('_route'), ]; if ($this->includeParams) { $currentRequestData['route_params'] = $request->attributes->get('_route_params'); } $this->routeData[spl_object_id($request)] = $currentRequestData; }

Puede modificar este enfoque para que se adapte a usted, o incluso simplemente usar este procesador directamente (aunque agrega más datos de los que está buscando en su pregunta).

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!