使用函数中的新参数覆盖控制器Synfony2

时间:2015-01-27 11:37:21

标签: symfony

我从FOSUserBundle覆盖了SecurityController。 我尝试在登录后保留一些数据,但为此我需要添加" Request $ request"函数protected参数renderLogin的参数,但是我得到以下错误:

运行时注意:Utilisateurs \ UtilisateursBundle \ Controller \ SecurityController :: renderLogin()声明应与FOS \ UserBundle \ Controller \ SecurityController :: renderLogin(array $ data)

兼容

这是我的代码:

 /**
     * 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);
                }

    }

谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

我建议你去听一下登录活动。

这里描述: https://stackoverflow.com/a/11180531/982075,可以使用fos_user.security.interactive_login事件应用于FOSU​​serBundle。

这样您就不必从FOSUserBundle覆盖SecurityController,但您可以在登录后保留数据。

答案 1 :(得分:0)

当您使用不同的参数集覆盖方法时,它将产生E_STRICT错误 - 这是特定于PHP的,而Symfony只是遵循标准。所以你似乎需要以不同的方式解决你的问题。如何使用:

$request = $this->getRequest()

在你的方法中(我假设你的控制器的基类是Symfony的Controller

检查这些以获取更多信息:

PHP: "Declaration of ... should be compatible with that of ..."

adding parameters to overridden method E_STRICT observation

Why is overriding method parameters a violation of strict standards in PHP?

注意:你有杂乱的代码。您可以使用$this->get('session')->isStarted()

检查会话是否已启动