現在、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のビューには何も表示されません。
この方法では無理なのでしょうか?
このほかに良い方法があるようでしたら、ご回答をお願いします。
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などで実現ができます。
何かの参考になれば。
>tdoiさん
すいません。
返信する場所を間違えてしまいました。
以下に記述し直します。
ご回答ありがとうございます。
Configureクラスは定数を扱うためのものでしたか・・・。
残念です・・・。
データを共有するのは、アプリ内なので、全体ということになります。
cakePHPにグローバルなデータを読み書きできる機能があるかと思ったのですが、
ないようですね、
一回セッションでやってみます。