Session Cakephp 3如何制作会话数组

Session Cakephp 3如何制作会话数组,session,cakephp,cakephp-3.0,cakephp-3.x,Session,Cakephp,Cakephp 3.0,Cakephp 3.x,我正在尝试在控制器中编写会话。我的结构是 $_SESSION['a'][0] = 1; $_SESSION['a'][1] = 2; $_SESSION['a'][2] = 3; 我正在尝试这个 Configure::write('Session', ['a' =>'1']) 但它不起作用。如何在cakephp 3中实现这一点要在cakephp 3中的会话中写入变量,您需要编写以下代码: $this->request->session()->write('Your K

我正在尝试在控制器中编写会话。我的结构是

$_SESSION['a'][0] = 1;
$_SESSION['a'][1] = 2;
$_SESSION['a'][2] = 3;
我正在尝试这个

Configure::write('Session', ['a' =>'1'])

但它不起作用。如何在cakephp 3中实现这一点要在cakephp 3中的会话中写入变量,您需要编写以下代码:

$this->request->session()->write('Your Key',Your_array);
要了解更多信息,请访问此处:

为了把事情弄清楚:

// code writing array to session
$a = [ "abc" => "word", "123" => 42, "?" => $b ];
$a["more"] = "if you need to add";
$a[] = "whatever";
$this->request->session()->write( 'my_array', $a );
// code reading array from session
$recall = $this->request->session()->read( 'my_array' );
debug( sprintf( "What's the word? [%s]", $recall["abc"] ) );

要在CakePHP 3中的会话中写入变量,需要编写以下代码:

$this->request->session()->write('Your Key',Your_array);
要了解更多信息,请访问此处:

为了把事情弄清楚:

// code writing array to session
$a = [ "abc" => "word", "123" => 42, "?" => $b ];
$a["more"] = "if you need to add";
$a[] = "whatever";
$this->request->session()->write( 'my_array', $a );
// code reading array from session
$recall = $this->request->session()->read( 'my_array' );
debug( sprintf( "What's the word? [%s]", $recall["abc"] ) );
你可以简单地使用

$session->write([
  'key1' => 'blue',
  'key2' => 'green',
]);
我指的是

你可以简单地使用

$session->write([
  'key1' => 'blue',
  'key2' => 'green',
]);
我指的是

答案是这不能在CakePHP3.x中完成

在vanilla PHP中,可以执行以下操作:

<?php
    session_start();
    $_SESSION['a'][0] = 1;
    $_SESSION['a'][1] = 2;
    $_SESSION['a'][2] = 3;
    var_dump($_SESSION);
?>
这是正确的,应该发生什么

在CakePHP中,不能在会话密钥中指定数组。例如:

$this->request->session()->write('a[]', 1);
$this->request->session()->write('a[]', 2);
$this->request->session()->write('a[]', 3);
$this->request->session()->write('a', 1);
$this->request->session()->write('a', 2);
$this->request->session()->write('a', 3);
这是行不通的

如果删除[],该值将被覆盖。例如:

$this->request->session()->write('a[]', 1);
$this->request->session()->write('a[]', 2);
$this->request->session()->write('a[]', 3);
$this->request->session()->write('a', 1);
$this->request->session()->write('a', 2);
$this->request->session()->write('a', 3);
$this->request->session->read'a'的值为3。值1和2已被覆盖。同样,这是意料之中的,因为每次都会覆盖密钥a。这方面的等效标准是:

$_SESSION['a'] = 1;
$_SESSION['a'] = 2;
$_SESSION['a'] = 3;
由于缺少索引数组,$\u会话['a']每次都会被覆盖。这是正常的行为。它需要有索引,例如:['a'][0],'a'][1]。。。工作

他们给出的其他答案,如key1和key2,是不合适的。因为在很多情况下,您希望所有内容都包含在索引数组中。对于这种情况,生成单独的键名是错误的。

答案是在CakePHP 3.x中无法做到这一点

在vanilla PHP中,可以执行以下操作:

<?php
    session_start();
    $_SESSION['a'][0] = 1;
    $_SESSION['a'][1] = 2;
    $_SESSION['a'][2] = 3;
    var_dump($_SESSION);
?>
这是正确的,应该发生什么

在CakePHP中,不能在会话密钥中指定数组。例如:

$this->request->session()->write('a[]', 1);
$this->request->session()->write('a[]', 2);
$this->request->session()->write('a[]', 3);
$this->request->session()->write('a', 1);
$this->request->session()->write('a', 2);
$this->request->session()->write('a', 3);
这是行不通的

如果删除[],该值将被覆盖。例如:

$this->request->session()->write('a[]', 1);
$this->request->session()->write('a[]', 2);
$this->request->session()->write('a[]', 3);
$this->request->session()->write('a', 1);
$this->request->session()->write('a', 2);
$this->request->session()->write('a', 3);
$this->request->session->read'a'的值为3。值1和2已被覆盖。同样,这是意料之中的,因为每次都会覆盖密钥a。这方面的等效标准是:

$_SESSION['a'] = 1;
$_SESSION['a'] = 2;
$_SESSION['a'] = 3;
由于缺少索引数组,$\u会话['a']每次都会被覆盖。这是正常的行为。它需要有索引,例如:['a'][0],'a'][1]。。。工作


他们给出的其他答案,如key1和key2,是不合适的。因为在很多情况下,您希望所有内容都包含在索引数组中。对于这种类型的场景,生成单独的键名是错误的。

我对已接受答案的编辑被拒绝,因此,为了和其他人的利益,我给出了一个看似必要的显式代码示例

// code to write to session
$a = [ 0 => "zero", 1 => "one", 2 => "two"  ];
$a[] = "three";
$this->request->session()->write( 'my_array', $a );

// code to read from session
$z = $this->request->session()->read( 'my_array' );
debug( $a[3] ); // outputs "three"

我对已接受答案的编辑被拒绝,因此我提出了一个似乎必要的明确的代码示例,以利于和其他人

// code to write to session
$a = [ 0 => "zero", 1 => "one", 2 => "two"  ];
$a[] = "three";
$this->request->session()->write( 'my_array', $a );

// code to read from session
$z = $this->request->session()->read( 'my_array' );
debug( $a[3] ); // outputs "three"

CakePHP3中不再有会话组件。这个答案不正确,因为他想创建一个数组,而不是单独的键。键1和键2是单独命名的键。如果要将其作为名称为[]的数组来执行,该怎么办?在CakePHP3.x中不能这样做。我已经发布了一个解释作为答案。CakePHP3中不再有会话组件。这个答案不正确,因为他想创建一个数组,而不是单独的键。键1和键2是单独命名的键。如果要将其作为名称为[]的数组来执行,该怎么办?在CakePHP3.x中不能这样做。我已经发布了一个解释作为答案。它起作用了,但是当我附加任何其他值时,它会覆盖而不是add to write,您需要从会话读取数组,并将新值推送到数组,然后再次为同一个键写入会话。因为根据CakePHP 3,如果您传递相同的密钥,文档值将被覆盖。如果这对您有效,请不要忘记接受答案。在CakePHP 3.x中不可能这样做。我已经发布了一个解释原因的答案。这个答案是错误的。它可以工作,但当我附加任何其他值时,它会覆盖而不是add to write,您需要从会话读取数组,并将新值推送到数组,然后再次为同一个键写入会话。因为根据CakePHP 3,如果您传递相同的密钥,文档值将被覆盖。如果这对您有效,请不要忘记接受答案。在CakePHP 3.x中不可能这样做。我已经发布了一个解释原因的答案。这个答案是错误的。您使用CakePHP会话接口的方式与使用vanilla PHP的方式相同-您可以将数组写入特定的键,然后通过该键再次检索该数组,作为一个数组,如接受的PHP中所述answer@flowtron你完全错了。对此给出的公认答案是不正确的,如果您实际使用CakePHP3安装对其进行了测试,您就会明白原因。接受的答案会写入一个名为“Your key”的数组键,因此如果您再次写入,它将覆盖该键中的任何值。这正是问题的关键所在
在was上寻址,不能使用CakePHP的会话语法,而可以使用vanilla PHP。如果你要发表评论,请在发表评论之前测试一下你的作品。如果你有一个解决方法,那么把它作为答案发布。I/did/。。您似乎仍然不了解使用CakePHP处理会话的方法,接受的答案可能也不完全清楚,但它显示了实现方法。如果您在$a中有一个数组,并且您在$this->request->session->write'my_array',$a以后可以通过键'my_array'检索整个数组。。通过$a[]推送方法将项附加到数组中的情况与此无关。。在我看来,使用CakePHP会话接口的方式与使用vanilla PHP的方式相同,您可以将数组写入特定的键,然后通过该键再次检索该数组,作为数组,正如在answer@flowtron你完全错了。对此给出的公认答案是不正确的,如果您实际使用CakePHP3安装对其进行了测试,您就会明白原因。接受的答案会写入一个名为“Your key”的数组键,因此如果您再次写入,它将覆盖该键中的任何值。这正是问题所要解决的问题,不能使用CakePHP的会话语法,而可以使用vanilla PHP。如果你要发表评论,请在发表评论之前测试一下你的作品。如果你有一个解决方法,那么把它作为答案发布。I/did/。。您似乎仍然不了解使用CakePHP处理会话的方法,接受的答案可能也不完全清楚,但它显示了实现方法。如果您在$a中有一个数组,并且您在$this->request->session->write'my_array',$a以后可以通过键'my_array'检索整个数组。。通过$a[]推送方法将项附加到数组中的情况与此无关。。在我眼里。