出于测试原因,我试图在小部件中使用Pjax。在视图中:
$testArgs = [
'param' => 'test'
];
Yii::$app->session->set('testArgs', $testArgs);
echo Test::widget($testArgs);
然后在小部件中:
class Test extends Widget {
public $param;
..
public function init() {
..
}
public function run() {
Pjax::begin();
echo "<a href='test/add'>[ + ]</a> | <a href='test/remove'>[ - ]</a>";
Pjax::end();
}
}
然后在TestController中:
public function actionAdd() {
$testArgs = Yii::$app->session->get('testArgs');
var_dump($testArgs);
die;
}
$ testArgs为NULL。为什么? Pjax创建了一个不同的会话?
更新1
我在session_id()中添加了一个echo,它似乎是同一个会话
更新2
在真正的小部件中,我传递给$ form(ActiveForm)对象。我认为这是个问题。我试图序列化它,但是它返回了一个错误,说&#34; Closure无法序列化&#34;
更新3
似乎封闭序列化是PHP中一个众所周知的错误,它通过传递来检查如何传递,因为我无法从对象中删除闭包。
答案 0 :(得分:0)
我会回答这个问题。不,PJax不会创建不同的会话。将表单对象添加到我的会话是打破它,我将为此打开一个不同的问题。