Ich arbeite an einer Symfony2.8-Anwendung, und ich versuche, die ShowAction des ExceptionController zu überschreiben, alles funktioniert gut, außer ich kann den aktuellen angemeldeten Benutzer nicht abrufen, die security.token_storage gibt immer null zurück . security.yaml:Symfony: Benutzerdefiniert ExceptionController
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: security.csrf.token_manager
check_path: fos_user_security_check
login_path: fos_user_security_login
default_target_path: default_security_target
use_referer: true
logout:
path: fos_user_security_logout
target: default_security_target
anonymous: true
remember_me:
key: "%secret%"
lifetime: 604800
path:/
access_control:
- { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, role: ROLE_ADMIN }
und in der Config erklären i den Controller als Dienst unter dem Block Dienstleistungen: twig.controller.exception: class: %twig.controller.exception.class% arguments: ["@twig",%kernel.debug%,"@security.token_storage"]
und hier ist mein Controller:
namespace test\testBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference;
use Symfony\Component\HttpKernel\Exception\FlattenException;
use Symfony\Component\HttpKernel\Log\DebugLoggerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\TwigBundle\Controller\ExceptionController as baseController;
use FOS\UserBundle\Model\UserInterface;
class ExceptionController extends baseController
{
private $tokenStorage;
public function __construct(\Twig_Environment $twig,$debug,TokenStorage $tokenStorage)
{
parent::__construct($twig,$debug);
$this->tokenStorage= $tokenStorage;
}
/**
* Converts an Exception to a Response.
*
* @param Request $request The request
* @param FlattenException $exception A FlattenException instance
* @param DebugLoggerInterface $logger A DebugLoggerInterface instance
* @param string $_format The format to use for rendering (html, xml, ...)
*
* @return Response
*
* @throws \InvalidArgumentException When the exception template does not exist
*/
public function showAction(Request $request, FlattenException $exception, DebugLoggerInterface $logger = null, $_format = 'html')
{
/*** $this->securityContext is a pitfall never use it here recommended by the documentation
$user = $this->tokenStorage->getToken()->getUser();//$this->tokenStorage->getToken() is always null
if (!is_object($user) || !$user instanceof UserInterface) {
$user=null;
}
$currentContent = $this->getAndCleanOutputBuffering($request->headers->get('X-Php-Ob-Level', -1));
$code = $exception->getStatusCode();
return new Response($this->twig->render(
$this->findTemplate($request, $_format, $code, $this->debug),
array(
'status_code' => $code,
'status_text' => isset(Response::$statusTexts[$code]) ? Response::$statusTexts[$code] : '',
'exception' => $exception,
'logger' => $logger,
'currentContent' => $currentContent
)
));
}
}
irgendwelche Vorschläge, bitte!
Fügen Sie den zugehörigen Code hinzu. –
innerhalb der ShowAction rufe ich $ this-> tokenStorage-> getToken(); es gibt null zurück und gibt an, dass der Tokenstorage Service innerhalb des Controllers ist, der Service selbst ist – ZeSoft
@ZeSoft: Nein, was er meinte, war deine Frage mit dem tatsächlichen Code zu aktualisieren. Bitte geben Sie auch Ihre 'security.xml' an - das sollte uns einen Hinweis geben, warum das nicht funktioniert –