1

我有一个像这样的 sfuser/属性:

session:
 symfony/user/sfUser/attributes: {
    symfony/user/sfUser/attributes:{
        15:{
            Telefon:'+304994994994',
            option:'15',
            rules:'12',
            arrayBunch:[{
              this: 'da',
              that: "where"
            }]
        },
        17:{...},
        mysetting: "val"
    },
    sfGuardSecurityUser:{},
    admin_module:{},
    sfGuardUserSwitcher:{}
}}

当我使用setAttribute("mysetting", "val")他们存储 mysetting 就像我的例子中的显示一样。因此没有必要使用setAttribute("mysetting", "val", 15)因为我得到了相同的答案。

我如何访问节点15arrayBunch并使用setAttribute在那里输入值或getAttribute来获取它们?

4

1 回答 1

2

我认为您以错误的方式进行操作(关于参数)。

你想做的是:

  • 添加一个名为的变量val
  • 与价值15
  • 在命名空间中mysetting

但是,您以错误的顺序编写了参数。

如果你检查代码,参数是:

public function setAttribute($name, $value, $ns = null)

所以你应该尝试:

->setAttribute('val', 15, 'mysetting');

编辑:( 抱歉没有注意到arrayBunch问题)

如果要编辑 arrayBunch 值:

// retrieve the current value
$arrayBunch = $this->getUser()->getAttribute("arrayBunch", array(), 15);

// made some modification
$arrayBunch['toto'] = 'titi';
$arrayBunch['this'] = 'do';

// put back the modification
$this->getUser()->setAttribute("arrayBunch", $arrayBunch, 15);

编辑

仔细查看您的 json,您应该检索整个属性15,因为名称空间是默认的: symfony/user/sfUser/attributes。所以:

$attribute15 = $this->getUser()->getAttribute(15);
$arrayBunch  = $attribute15['arrayBunch'];

如果您想应用一些更改:

// update arrayBunch
$arrayBunch['this'] = 'dada';
// do not forget to re-add modified arraybBunch to the whole variable
$attribute15['arrayBunch'] = $arrayBunch

// and if you want to add a value
$attribute15['mysetting'] = 'val';

// then, save every thing to the session again
$this->getUser()->setAttribute(15, $attribute15);
于 2012-08-06T10:29:19.580 回答