有没有办法通过Kohana的内置会话处理程序从多维数组中设置和获取值?

时间:2010-10-16 03:36:31

标签: php kohana kohana-3

在PHP中,我经常做以下事情:

$_SESSION['var']['foo'] = array('bar1' => 1, 'bar2' => 2);
// ...
$_SESSION['var']['foo']['bar2'] = 3;
// ...
echo $_SESSION['var']['foo']['bar2']; // 3

我想知道在与Kohana的会话中存储多维数组的推荐方法。

我知道我可以执行以下操作,但我不知道如何使其适用于多维,特别是获取部分:

Session::instance()->set('var', array(
 'foo' => array(
  'bar1' => 1,
  'bar2' => 2,
 ),
));
// ...
// how do I set just bar2?
// ...
// this gets the whole array, but how do I get just bar2? 
Session::instance()->get('var');

所以,问题是:

  1. 我如何设置只是bar2?
  2. 我如何获取只是bar2?
  3. 有没有办法在Kohana 3中做其中任何一个?

    我很乐意使用本机会话,但我们正在尝试使用数据库会话。

2 个答案:

答案 0 :(得分:4)

简短的回答是,鉴于目前Kohana会议的实施,没有办法做到这一点。您有两种选择:

获取并设置整个数组,每次编辑所需的位:

$array = Session::instance()->get('var');
$array['foo']['bar2'] = 'baz';
Session::instance()->set('var', $array);

或者您覆盖Kohana_Session-> get()和 - > set()方法(定义为here on github)。 请记住,鉴于Kohana中精彩的“分层”文件系统,您实际上可以扩展类,只需修改所需的方法,而无需编辑核心Kohana代码。

我的想法是更改$key参数以接受字符串或数组。如果传入一个数组,它应该将数组中的每个元素解释为“更深”的级别。

$key = array('var', 'foo', 'bar2');
Session::instance()->get($key, $default);
Session::instance()->set($key, 'baz');

答案 1 :(得分:3)

$session = & Session::instance()->as_array();
$session['foo']['bar2'] = 'baz';

UPD。此外,您可以使用Arr::path()

$bar2 = arr::path(Session::instance()->as_array(), 'foo.bar2');// returns 'baz'
$bars = arr::path(Session::instance()->as_array(), '*.bar2');  // returns array of bar2's
相关问题