CakePHPでシステムを構築しているとAppControllerに何かしらの変数を用意し、継承するコントローラーで値を登録したり取り出したいときにその変数の値を利用したいときが良くあります。

例えば性別や住所などの場合は各コントローラー内で変数を用意するよりはAppControllerで設定すれば楽になります。

が、意外とその設定方法がネットでは公開されてない。

もしかして分かり切った内容なだけにネットに公開するまでもない?w

個人の考え方としてはinitialize() 前あたりに変数宣言しておき、initialize()内で値を代入するという方法。

class AppController extends Controller
{
 public $pref_ary;
 public function initialize(): void
 {
  $pref_ary = array("東京", "大阪", "福岡"));
 }
}

class PrefController extends AppController
{
 public function index()
 {
  debug($pref_ary);
 }
}

しかし、これではNULLが返ってきました。代入されていない。AppController内で変数用意すれば共通で使えて良いアイデアだと思ってたんですがねー。

でもよく考えてみると、ControllerからViewに変数の値を渡す場合はちゃんとした方法がありました。それはsetを使う事でした。

public function initialize(): void
{
 $this->set("pref_ary", array("東京", "大阪", "福岡"));
}

こうすることで無事debugでは配列の内容が表示されました。

でもこれ、もしかして予め変数の宣言すらも必要ない?