2011-09-14 6 views
0

セッションにオブジェクトを格納するときに少し問題があります。私が理解していると思うように、クラスがシリアライズ可能で、session_start()を呼び出す前にクラスをインクルードすると、phpは自動的にオブジェクトを直列化/直列化解除します。なしでqcodoでPHPのシリアライゼーションを避けようとしています

require(dirname(__FILE__) . '/../includes/prepend.inc.php'); 
QApplication::QcodoInfo(); 

if (!isset($_SESSION["person"])) { 
    $person = Person::LoadById(1); 
    $_SESSION["person"]=serialize($person); 
} 
else { 
    echo "Hello ".unserialize($_SESSION["person"])->FirstName; 
} 

:私は何を余儀なくされています動作させるためには、

require(dirname(__FILE__) . '/../includes/prepend.inc.php'); 
QApplication::QcodoInfo(); 

if (!isset($_SESSION["person"])) { 
    $person = Person::LoadById(1); 
    $_SESSION["person"]=$person; 
} 
else { 
    echo "Hello ".$_SESSION["person"]->FirstName; 
} 

ので:次の例では

私は、オブジェクトの値を回復することはできません( qcodo 0.4.22 frameworkを使用して) -qcodoクラス私は直列化を使う必要はありません。 シリアライゼーションを避けることはできますか?

+0

どのクラスが 'Person'ですか? – hakre

+0

Qcodoサイトのサンプルデータベースから取得した「テーブルクラス」です。私は、シリアル化せずにオブジェクトをセッションに格納することができないことを説明したいだけです – yauros

+0

そのテーブルクラスには具体的かつ具体的な名前がありますか?おそらくhttp://api.qcodo.com/で検索できるものでしょうか?私は詳細を理解したいと思います。セッションに格納する際に具体的なインスタンスに対処するのに問題があることは、すでに私には明らかです。 – hakre

答えて

1

ありがとうございましたproviding the link to the forumsあなたはそこに非常に重要な情報を入れて:セッションをunserializing時には、意味

When the object is in the session i get the error: “The script tried to execute a method or access a property of an incomplete object.”

は、クラス定義がすでにロードされていません。非直列化はsession_startで行われます。最初にすべてのクラス定義をロードしてから、セッションを開始します。その文脈での参考は、次のとおりです。

ので、セッションが開始されるようになる見つけることを試みます。 PHPマニュアルにはセッションに関する一般的な情報と、起動時の設定方法に関する情報があります。セッションを自動起動するオプションがありますが、それはおそらく実行中ですが、これは単なる仮定です構成がより多くなり、Qcodoがどのようにクラスを読み込むのか分からない。

0

感謝!私はあなたのコメントで解決策に近づいています。

qcodoコアを見ると、セッションが初期化されている場所が表示されます。これはクラスを組み込む前に実行されます。

問題は、クラスがコールした瞬間にクラスが含まれていることです(その可能性はありますか?)。私はクラスファイルにエコーセンテンスを書いており、エコーは私がクラスを使用する瞬間に現れます。このため、問題を解決するためにsession_start()を呼び出すタイミングを知りません。

編集:私は、PHPの "オートロード"機能を発見しました。それはないのですか?だから私の質問は、自動ロードを維持し、適切な瞬間にセッションを開始することが可能な場合です

EDIT2:私は最後に解決策を見つけました。 qcodoフォーラムで私にいくつかの選択肢がありました。最後に、qcodoがsession_start関数を呼び出す前に、データクラスをインクルードする必要がありました。誰もがThyを返す

+0

可能であれば、あなたの答えでどのようにしたのですか?この質問は解決されたようにマークされます。ありがとう!そしてあなたがそれを解決できるとうれしい! – hakre

関連する問題