-1

我有很多用户在单页上填写的表单,但是在用户发布后,控制器将检查表单是否有效以及用户是否已经登录然后保存信息。

需要帮助

如果用户未登录,则将他重定向到他注册的注册页面,注册后他将自动登录,然后它应该返回到带有发布值的同一个控制器,以便可以保存它。

  • $form->isValid && !$this->getUser()然后将用户重定向到使用保存在会话中的此表单值的注册页面?
  • 用户注册或登录后,然后返回上一个控制器(无需任何进一步操作),它应该会自动保存之前提交的表单。因为它是$form->isValid()

我很困惑,我应该在会话中保存表单值并重定向吗?它会正确保存模型值吗?

另外我应该如何将用户重定向到注册页面,同时告诉 Symfony 在登录后使用 post 方法返回同一页面。

4

2 回答 2

1

对我来说,最简单的解决方案是将两个页面作为 div 放在同一页面上,并使用 javascript 隐藏未提交的表单,这样您就不需要存储和重新填充值。

于 2016-01-12T04:26:06.643 回答
1

我认为你必须遵循这个结构:

案例:提交表单页面后重定向到注册/登录页面。

1.) 填写表单并在提交表单后将发布数据转换为序列化数组。在这里

2.)将该序列化数组粘贴到隐藏字段或会话(注册/登录页面)中。

3.) 填写注册表,注册后,发回上一个表单页面,将隐藏数据发送到该页面并反序列化它们。这里

建议:如果您希望您的帖子数据不显示在页面中,那么您可以使用 urlencode 和 urldecode 函数或您可以使用的任何其他编码方法。

注意:使用会话或 cookie 将帖子数据从一页发送到另一页是不好的做法。它将在所有页面上,直到您取消设置/删除它。

手动从控制器重定向到登录页面,使用以下:

    $session->set('_security.user_firewall.target_path', $request->getUri());

    throw new AuthenticationException(); // use Symfony\Component\Security\Core\Exception\AuthenticationException;

从注册页面重定向,使用以下内容:

         $key = '_security.user_firewall.target_path'; #where "user_firewall" is your firewall name

        //check if the referrer session key has been set
        if ($this->container->get('session')->has($key))
        {
            //set the url based on the link they were trying to access before being authenticated
            $url = $this->container->get('session')->get($key);

            //remove the session key
            $this->container->get('session')->remove($key);
        }
        // if the referrer key was never set, redirect to a default route
        else{
            $url = $this->generateUrl($routeName);
        }

        return new RedirectResponse($url);
于 2016-01-12T04:44:27.163 回答