Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 传递数组而不在url中显示它 我想做的是:_Php_Arrays_Forms_Symfony - Fatal编程技术网

Php 传递数组而不在url中显示它 我想做的是:

Php 传递数组而不在url中显示它 我想做的是:,php,arrays,forms,symfony,Php,Arrays,Forms,Symfony,我目前正在通过LinkedIn OAuth在我的symfony2应用程序上安装身份验证 在我的userController中,我有一个用于获取linkedin数据的函数,还有一个用于创建新用户的函数 此“创建新用户”功能可以处理作为参数传递的数组帮助下的linkedin用户和通过POST请求中的表单传递的非linkedin用户: public function createUserAction($from_linkedin = false, $linkedin_data = null) {

我目前正在通过LinkedIn OAuth在我的symfony2应用程序上安装身份验证

在我的userController中,我有一个用于获取linkedin数据的函数,还有一个用于创建新用户的函数

此“创建新用户”功能可以处理作为参数传递的数组帮助下的linkedin用户和通过POST请求中的表单传递的非linkedin用户:

public function createUserAction($from_linkedin = false, $linkedin_data = null)
{
    $user = new User();
    if(!from_linkedin) {
        // User comes from the registration form
        $user = $post_data,
    } else {
        // User comes from linkedin OAuth
        $user = $linkedin_data;
    }
    $em->persist($user);
    $em->flush();
 }
我想让我的linkedin OAuth用户选择一个密码,以便他们将来可以连接linkedin或标准电子邮件/密码表单。我也觉得这样更安全

为此,我创建了一个中介函数来向用户显示密码表单。此表单在linkedin呼叫之后和注册功能之前显示

protected function chosePasswordAction($linkedin_data)
{
    $form = createForm(new ChosePasswordType);
    if($method = POST) {
        $linkedin_data["password"] = $post_data["password"];

        return createUserAction(true, $linkedin_data);
    }

    return $this->renderView("chosePassword.html.twig", array(
        'form' => $form,
        'data' => $linkedin_data,
    ));
}
我的问题是: 表单显示得很好,但是当我在POST请求中从表单返回时,出现了一个错误。缺少$linkedin_数据数组,因此chosePassword函数返回错误:

Controller "Bundle\Controller\UserController::chosePasswordAction()" 
requires that you provide a value for the "$linkedin_data" argument 
(because there is no default value or because there is a non optional 
argument after this one). 

我所知道的唯一方法是将$linkedin_数据数组作为参数添加到表单路由中,但它一点也不安全。我怎么能轻松地传递它?没有风险。

< p>现在我知道你在做什么,我会考虑把数据存储在PHP中,当你第一次收到它的时候。别费心再来回发送了。这不仅是黑客行为,而且容易被篡改,特别是如果您没有运行https,而Linedin最有可能运行https


快乐编码

有两个请求发生了吗?您是否正在将linkedin数据传递回密码表单?您可以将数据存储在服务器端,直到他们设置密码,然后附加密码/身份验证数据,或者必须通过隐藏输入将其发送回用户的设置密码表单,并在他们将linkedin数据重新提交到您的服务器时处理这些数据。您是说,当您执行GET请求而不是POST时,一切都正常吗?@Fydo:将linkedin数据传递到密码表单是我想要实现的目标。在这种情况下,通过隐藏输入发送看起来是最好的选择,即使对于应用程序中这样一个敏感的部分来说感觉有点黑客。不过,你的回答证实了我的第一直觉,我要试一试——谢谢@李斯特先生不,我只是在这里处理POST,我不想对密码、用户私有数据等使用任何GET方法。在这种情况下,我想再次对您的第一个答案发表评论,以支持此选项,而不是表单中的隐藏输入。谢谢