2011-07-07 4 views
2

私は私の最初のCodeIgniter(PHPに精通ではなく、CI)アプリケーションをコーディングし、次のセットアップ持っています:私はサインアッププロセスを制御するコントローラ、申し込みを、持っているCodeIgniterのコントローラを通じてクラスを再利用

を。コントローラーの各機能は、プロセスの次のステップです。私はオブジェクト、Didを持っています、私は現在ライブラリとしてロードしています。このオブジェクトのプロパティ/変数は、登録プロセスが進むにつれて更新されます。

Signupコントローラの1つの機能のプロパティが次の機能に継承されないという問題があります。クラスがすべての関数で再構築されているかのようです。

再インスタンス化する必要なく、クラス全体を再利用する方法はありますか?セッションでシリアル化して保存する必要はありません。

ありがとうございます。

+0

セッションとシリアル化を探します。 – hakre

+0

セッション中に保存します。 – Brad

答えて

2

、同じ問題に多くのソリューションがあります。あなたの実装にうまく適合しない場合は、これを無視してください。

オブジェクトにサインアップステップを保持することはお勧めです。しかし、新しいページを読み込むたびに、すべてのオブジェクトが再構築されます。データを永続させるには、セッションに格納する必要がありますが、コントローラ内のセッション変数で作業する必要はありません。

どのようにデータをアプリケーションに転送していますか?フォームやアヤックス経由ですか?

これを行うには、セッションからオブジェクトを直列化解除し、コントローラのコンストラクタにオブジェクトとして格納する方法があります。そうすれば、$ myObj-> function()を$ myObj-> function()を実行して$ myObj-> save()関数を使って再初期化して保存することができます。

希望に役立ちます!

+0

私はむしろセッション変数で作業したくないかもしれませんが、そうする必要があるかもしれません。私は、フォームを介してプロセスの次のステップに提出することで、アプリケーションにデータを転送しています。オブジェクト内に「保存」機能は考えていない。それはうまくいくかもしれない。ありがとう。 –

+0

私は 'Did'クラス内でFactoryパターンを使用しました。これは、Codeigniterセッションクラスを利用するsave関数です。それは働いています。リードしてくれてありがとう。 –

2

問題は、アプリケーションのメモリ内の状態が依頼から依頼されたままであることが原因です。

あなたのクラスは、リクエスト間でDidオブジェクトの同じインスタンスを使用することを期待しています。

これはPHP/HTTPの仕組みではありません。各リクエストは個別に処理され、アプリケーションの独自のインスタンスです。したがって、各要求は新しいDidオブジェクトを作成します。

状態を保持するには、セッション間で情報を伝達するためにセッションを使用するか、永続的な状態を処理するためにデータベースを使用するか、またはその両方を組み合わせる必要があります。いつものように

Codeigniter Sessions

Codeigniter Database Class

+0

修正。私の質問は、CodeIgniterが新しいオブジェクトを作成するかどうか、またはインスタンスが永続化できるかどうかということでした。 –

+0

これはCodeIgniterの問題ではなく、Core to PHPとHTTP Request Modelはそれぞれのリクエストが個別であり、セッション外で何も結びつけないので、PHPオブジェクト(メンバ)はリクエスト間で自動的には存続しません。 – jondavidjohn

関連する問題