Estoy anulando el SecurityController de FOSUserBundle. Intento conservar algunos datos después del inicio de sesión, pero para eso necesito agregar el parámetro "Solicitar $ solicitud" a la función protegida función renderLogin, pero aparece el siguiente error:

Aviso de tiempo de ejecución: Declaración de Utilisateurs \ UtilisateursBundle \ Controller \ SecurityController :: renderLogin () debe ser compatible con FOS \ UserBundle \ Controller \ SecurityController :: renderLogin (array $ data)

Aquí está mi código:

 /**
     * Renders the login template with the given parameters. Overwrite this function in
     * an extended controller to provide additional data for the login template.
     *
     * @param array $data
     *
     * @return \Symfony\Component\HttpFoundation\Response
     */
    protected function renderLogin(array $data, Request $request)
    {
        function is_session_started()
            {
                if ( php_sapi_name() !== 'cli' ) {
                    if ( version_compare(phpversion(), '5.4.0', '>=') ) {
                        return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
                    } else {
                        return session_id() === '' ? FALSE : TRUE;
                    }
                }
                return FALSE;
            }


            if (is_session_started() == TRUE)
                {
                    $session = $request->getSession();
                    $content = $session->get('result');
                    $idQuery = $session->get('query_id');
                    $authorId = $this->getUser()->getId();

                    $biblio = new Biblio;
                    $biblio->setAuthorId($authorId);
                    $biblio->setContent($content);
                    $biblio->setQueryId($idQuery);
                    $biblio->setDate(new \DateTime());
                    $em = $this->getDoctrine()->getManager();
                    $em->persist($biblio);
                    $em->flush();

                    $session->clear();

                    $response = $this->forward('BiblishareBundle:Profile:show');

                    return $response;
                }
            else
                {
                    return $this->render('FOSUserBundle:Security:login.html.twig', $data);
                }

    }

Gracias por tu ayuda

0
nico_lrx 27 ene. 2015 a las 14:37

2 respuestas

La mejor respuesta

En su lugar, le aconsejaría que escuche el evento de inicio de sesión.

Se describe aquí: https://stackoverflow.com/a/11180531/982075 y se puede aplicar a FOSUserBundle mediante {{X0} } evento.

De esa manera, no tiene que anular SecurityController de FOSUserBundle, pero puede conservar los datos después de iniciar sesión.

2
Community 23 may. 2017 a las 11:46

Cuando anula un método con un conjunto diferente de parámetros, producirá un error E_STRICT; esto es específico de php y Symfony solo sigue los estándares. Entonces parece que necesitas resolver tu problema de manera diferente. ¿Qué tal usar:

$request = $this->getRequest()

En su método (supongo que la clase base de su controlador es Controller de Symfony)

Consulte estos para obtener más información:

PHP: "La declaración de ... debería ser compatible con la de ..."

agregar parámetros a la observación E_STRICT del método anulado

¿Por qué anular los parámetros del método es una violación de los estándares estrictos en PHP?

NOTA: código desordenado que tienes allí. Puede verificar si la sesión se inició usando $this->get('session')->isStarted()

0
Community 23 may. 2017 a las 11:46