人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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のビューには何も表示されません。

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

●質問者: hguriehgureirh
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CakePHP config Eクラス INDEX name
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
ベストアンサー

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にグローバルなデータを読み書きできる機能があるかと思ったのですが、

ないようですね、

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ