Ошибка ветки в WebProfiler с включенным фильтром Doctrine

У меня странная ошибка с Twig и WebProfiler при включении фильтра Doctrine.

request.CRITICAL: Uncaught PHP Exception Twig_Error_Runtime: "An exception has been thrown
during the rendering of a template ("Error when rendering "http://community.localhost:8000/
_profiler/e94abf?community_subdomain=community&panel=request" (Status code is 404).")." at
/../vendor/symfony/symfony/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/
layout.html.twig line 103

это {{ render(path('_profiler_search_bar', request.query.all)) }} вызывает ошибку.

Мой фильтр доктрины позволяет добавлять ограничения фильтра для некоторых классов (мультитенантное приложение с динамическими поддоменами)

<?php

namespace AppBundle\Group\Community;

use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Query\Filter\SQLFilter;

/**
* Class CommunityAwareFilter
*/
class CommunityAwareFilter extends SQLFilter
{
/**
* Gets the SQL query part to add to a query.
*
* @param ClassMetadata $targetEntity
* @param string        $targetTableAlias
*
* @return string The constraint SQL if there is available, empty string otherwise.
*/
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
if (!$targetEntity->reflClass->implementsInterface(CommunityAwareInterface::class)) {
return '';
}

return sprintf('%s.community_id = %s', $targetTableAlias, $this->getParameter('communityId')); // <-- error
// return ''; <-- no error
}
}

Я также расширил Symfony Router для автоматического добавления поддомена в маршрутизацию.

У вас есть идеи, что может вызвать это?

ОБНОВИТЬ

<?php

namespace AppBundle\Routing;

use AppBundle\Group\Community\CommunityResolver;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Bundle\FrameworkBundle\Routing\Router as BaseRouter;

class Router implements RouterInterface
{
/**
* @var BaseRouter
*/
private $router;

/**
* @var RequestStack
*/
private $request;

/**
* @var CommunityResolver
*/
private $communityResolver;

/**
* Router constructor.
*
* @param BaseRouter        $router
* @param RequestStack      $request
* @param CommunityResolver $communityResolver
*/
public function __construct(BaseRouter $router, RequestStack $request, CommunityResolver $communityResolver)
{
$this->router = $router;
$this->request = $request;
$this->communityResolver = $communityResolver;
}

/**
* Sets the request context.
*
* @param RequestContext $context The context
*/
public function setContext(RequestContext $context)
{
$this->router->setContext($context);
}

/**
* Gets the request context.
*
* @return RequestContext The context
*/
public function getContext()
{
return $this->router->getContext();
}

/**
* Gets the RouteCollection instance associated with this Router.
*
* @return RouteCollection A RouteCollection instance
*/
public function getRouteCollection()
{
return $this->router->getRouteCollection();
}

/**
* Tries to match a URL path with a set of routes.
*
* If the matcher can not find information, it must throw one of the exceptions documented
* below.
*
* @param string $pathinfo The path info to be parsed (raw format, i.e. not urldecoded)
*
* @return array An array of parameters
*
* @throws ResourceNotFoundException If the resource could not be found
* @throws MethodNotAllowedException If the resource was found but the request method is not allowed
*/
public function match($pathinfo)
{
return $this->router->match($pathinfo);
}

public function generate($name, $parameters = array(), $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH)
{
if (null !== ($community = $this->communityResolver->getCommunity())) {
$parameters['community_subdomain'] = $community->getSubDomain();
}

return $this->router->generate($name, $parameters, $referenceType);
}
}

0

Решение

Я нашел решение, фактически я передал свой объект «арендатор» (здесь мое «сообщество») в сеансе следующим образом (в подписчике onKernelRequest)

if (null === ($session = $request->getSession())) {
$session = new Session();
$session->start();
$request->setSession($session);
}
$session->set('community', $community);

Я изменил, чтобы сохранить этот объект в сервисе, и он работает. Возможно, использование сессии для хранения данных — плохая практика.

0

Другие решения

Я думаю, что переопределение вашего Symmfony Router может вызвать проблему. Можете ли вы вставить нам код?

-1

По вопросам рекламы [email protected]