问题
For testing reasons, I am trying to use Pjax in a widget. In the view:
$testArgs = [
'param' => 'test'
];
Yii::$app->session->set('testArgs', $testArgs);
echo Test::widget($testArgs);
Then in the widget:
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();
}
}
Then in TestController:
public function actionAdd() {
$testArgs = Yii::$app->session->get('testArgs');
var_dump($testArgs);
die;
}
$testArgs is NULL. Why? Pjax creates a different session?
UPDATE 1
I have added an echo with session_id() and it seems is same session
UPDATE 2
In the real widget I am passing to session a $form (ActiveForm) object. I think this is the issue. I tried to serialize it, but it returned an error saying "Closure can not be serialized"
UPDATE 3
It seems that closure serialization is a well known error in PHP reviewing how to by pass that, since I can not remove the closures from the object.
回答1:
I will answer this question. No, PJax does not create a different session. Adding form object to my session is breaking it, I will open a different question for this.
来源:https://stackoverflow.com/questions/38418732/yii2-pjax-and-session