自前でアクセスログを記録する機能を作るときに、Controllerでセットした値(ページタイトルのtitle_for_layout)をログに含めたいと思い調べた。
title_for_layoutは通常コントローラのアクションでセットするためbeforeFilter()では取得できないので、beforeRender()にログ保存の処理を入れる。
とり方はこう。
$value = $this->viewVars['title_for_layout'];
ちなみに、beforeRnender()時点の$thisの中身は次のようになっている。
exampleController Object ( [name]...コントローラ名 [uses]...使用するモデル [components]...使用するコンポーネント [helpers]...使用するヘルパー [here]...現在のパス(アクセスログに使ってる) [webroot] [action]...アクション(method)名 [params] => array( [controller] [action] [named] [pass] [plugin] [form]...送信されたフォームデータ [url] [isAjax]...RequestHandler使用時のajax判定? [paging] ...paginater使用時に取得パラメータ ) [data]...フォーム使用時 [paginate]...paginater使用時の設定パラメータ [viewPath]...viewファイルの格納パス?(/views/以下) [layoutPath]...layoutファイルの格納パス? [viewVars]...controllerでsetした値 [modelNames]...その時点で使用しているモデル?? [base] [layout]...使用するviewのlayout [autoRender]...自動的にviewを出力するかどうかのフラグ [autotLayout]...自動的にレイアウトを出力するかどうかのフラグ? ...あと使わないので省略 )