1.2系でヘルパーからコンポーネントへアクセスする方法

まず1.1系では

例えば HogeComponent にアクセスしたいヘルパーに

$this->view->controller->HogeComponent->method();

というように書けば、HogeComponent の method にアクセスできる。

CakePHP ヘルパーからコンポーネントへのアクセス方法 | Sun Limited Mt.

というように書くことが出来ます。

1.1系ではヘルパーにはビュークラスのインスタンス($view)、ビューにはコントローラクラスのインスタンス($controller)がセットされていたので上記が可能でした。

1.2系では

一方、1.2系(Beta 1.2.0.6311)では、

というように変更されていたので、1.1系の方法ではアクセスできませんでした。

解決策

やり方は色々あると思いますが、Viewクラスの配列変数$__passedVarsにコントローラで使われている変数名をセットすると、コントローラからビューへ変数が引き継がれる仕組みを利用しました。

コアのViewクラスを触りたくないので、Viewクラスを継承したクラスを使うようにしました。
【app/views/app.php

<?php
class AppView extends View {
	
	function __construct(&$controller, $register = true) {
		// コンポーネントを全てセットする
		foreach ( $controller->components as $component ){
			$this->__passedVars[] = $component;
		}
		parent::__construct($controller);
	}
}
?>

次にAppControllerクラスで、ビューに上記AppViewクラスを使用するようにセットします。
【app/controllers/app_controller.php

<?php
class AppController extends Controller {
	$view = 'App'; // AppView
	$components = array('Hoge'); // HogeComponent
}
?>

ここまでで、ビューにコンポーネントがセットされるようになりました。

最後に任意のヘルパーの中でHogeComponentへアクセスするには、

$view = 	ClassRegistry::getObject('view');
$view->Hoge;

というように、まずClassRegistryからビュークラスのインスタンスを取り出すことで可能です。

オマケ

上記の構成にしておけば、テンプレートの中でHogeComponentへは

$this->Hoge;

でアクセスできます。