0

私は YII の使用に関してはまだ初心者ですが、ここ数日間セッション変数を使用しており、エラーの背後にある概念を理解できないようです。アドバイスをいただければ幸いです。

私の追加機能は、セッション変数栄養に追加された最後の 3 つの変数を追跡するという現在の目的のために、これまでのところ完全に機能しています。

public function addSessionFavourite($pageId)
{
    $page = Page::model()->findByPk($pageId);
    $categoryName = $page->getCategoryNames();

    if($categoryName[0] == 'Nutrition')
    {
        if(!isset(Yii::app()->session['nutrition']))
        {
            Yii::app()->session['nutrition'] = array();
        }
        $nutrition = Yii::app()->session['nutrition'];
        array_unshift($nutrition, $pageId);
        array_splice($nutrition, 3);
        Yii::app()->session['nutrition'] = $nutrition;
    }

何をしようとしても、削除機能がまったく機能しないようです。セッション配列を一時配列に転送する理由は、「関数内でグローバル化された変数が unset() の場合、ローカル変数のみが破棄されます。呼び出し環境の変数は、 unset() が呼び出される前と同じ値です。" しかし、それは完全な失敗でした。

public function removeSessionFavourite($pageId)
{
    $page = Page::model()->findByPk($pageId);
    $categoryName = $page->getCategoryNames();

    if($categoryName[0] == 'Nutrition')
    {
        if(!isset(Yii::app()->session['nutrition']))
        {
            return true;
        }
        $nutritionArray = Yii::app()->session['nutrition'];
        unset($nutritionArray[$pageId]);
        Yii::app()->session['nutrition'] = $nutritionArray;
    }

正しい方向へのアドバイスやプッシュをいただければ幸いです。

4

1 に答える 1

1

私は個人的には使用したことがなくYii::app()->session、通常は Yii ユーザーを使用していますが、問題が発生したことはありません。

Yii::app()->user->setState('test', array('a'=>1,'b'=>2));
print_r(Yii::app()->user->getState('test')); //see whole array

$test = Yii::app()->user->getState('test');
unset($test['b']);
Yii::app()->user->setState('test',$test);
print_r(Yii::app()->user->getState('test')); //only 'a'=>1 remains

Yii::app()->user->setState('test', null);
print_r(Yii::app()->user->getState('test')); //now a null value

上記のコメントで述べたように、セッション変数を使用した多次元配列には問題があるようです: https://code.google.com/p/yii/issues/detail?id=1681

于 2013-08-29T20:53:39.863 に答える