cakePHPのグローバル変数についての質問


現在、cakePHPを使用して開発しています。

コントローラー間で値を共有したいので、
アプリ内で読み書きできる変数が必要です。

configureクラスで実現できると思ったので、
「/app/config/」内に「test.php」を作成し、
以下のように記述しました。

<?php
$config['test']['name'] = '';
?>

そして、とりあえず同一のコントローラー内で値を読み書きできるかを調べようと思い、
コントローラー内に以下の2つのメソッドを記述しました。

function index(){
Configure::load('test');
Configure::write('test.name','aaaaa');
}

function showData(){
Configure::load('test');
$this->set('data',Configure::read('test.name'));
}

単にindexで書き込み、showDataで読み込んでいます。
これを実行すると、shoeDataのビューには何も表示されません。

この方法では無理なのでしょうか?
このほかに良い方法があるようでしたら、ご回答をお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/06/30 20:14:45

ベストアンサー

id:tdoi No.1

回答回数174ベストアンサー獲得回数75

Configureクラスに状態を保存することはできません。

Configureはどちらかというと定数を扱うための仕組みです。

indexアクションの処理は、

// これによりtest.phpが読み込まれ、test.nameに空文字列がセット
Configure::load('test');
// これによりtest.nameにaaaaがセット
Configure::write('test.name','aaaaa');

となり、これはこれで正しいです。

ただ、語弊のある表現になりますが、次にshowDataアクションにアクセスした際は、このindexアクションが実行されたものとは別な環境での実行になります。そのため、上記の設定が行われていない状態で処理がすすみます。

そうすると、

// これによりtest.phpが読み込まれ、test.nameに空文字列がセット
Configure::load('test');
// これによりtest.name、つまり、空文字列が、dataという変数にセットされます。
$this->set('data',Configure::read('test.name'));

となります。

では、どうやってデータを共有するかですが、データを共有したい範囲によって変わります。

例えばですが、クエリパラメタに埋め込む、セッション、Cookie、ファイル、DBなどで実現ができます。

何かの参考になれば。

id:hguriehgureirh

>tdoiさん

すいません。

返信する場所を間違えてしまいました。

以下に記述し直します。



ご回答ありがとうございます。

Configureクラスは定数を扱うためのものでしたか・・・。

残念です・・・。

データを共有するのは、アプリ内なので、全体ということになります。

cakePHPにグローバルなデータを読み書きできる機能があるかと思ったのですが、

ないようですね、

一回セッションでやってみます。

2011/06/30 01:20:19
  • id:hguriehgureirh
    hguriehgureirh 2011/06/30 01:17:39
    >tdoiさん

    ご回答ありがとうございます。
    Configureクラスは定数を扱うためのものでしたか・・・。
    残念です・・・。

    データを共有するのは、アプリ内なので、全体ということになります。
    cakePHPにグローバルなデータを読み書きできる機能があるかと思ったのですが、
    ないようですね、

    一回セッションでやってみます。
  • id:tdoi
    アプリ内の全体とのことですが、Webシステムは多数の人が同時にアクセスできるシステムです。

    あるユーザの一連の操作に対して共有したいのか、すべてのユーザに対して共有したいのか、そういったことも検討された方がよろしいかと。セッションで可能なのは、あるユーザの一連の操作に対して共有したい場合です。
  • id:hguriehgureirh
    hguriehgureirh 2011/06/30 20:14:27
    >tdoi

    >あるユーザの一連の操作に対して共有したいのか、すべてのユーザに対して共有したいのか、そういったことも検討された方がよろしいかと。

    今回のアプリは月に2,3回特定のユーザーが使用するものなので、ユーザーに対しての共有になります。
    確かに、共有といっても幅広くて判断できないですよね・・・。
    申し訳ございませんでした。

    セッションを使用したところ上手くいきました。

    ご回答ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません