CakePHPが2.0になって変更した仕様の一つにControllerのアクション内でComponentを呼び出す方法があるようです。

以前だと

App::import( 'Component', 'MyComponent' );
$MyComponent = new MyComponent();

で良かったはずですが、2.0だと色々と仕様が変わっているため

Argument 1 passed to MyComponent::__construct() must be an instance of ComponentCollection, none given, called in ..........

などとエラーになります。

そこで調べたらより便利な方法が提供されているではありませんか!

$component = $this -> Components -> load( 'ComponentName' );

これなら1行でOKです。

Loading Components On The Fly

You might not need all of your components available on every controller action. In situations like this you can load a component at runtime using the Component Collection. From inside a controller you can do the following:

<?php
// *Controller の my_action で OneTimer コンポーネントをロードする
public function my_action() {
    $this->OneTimer = $this->Components->load('OneTimer');
    $this->OneTimer->getTime();
}

ただしこの場合、通常行われる初期化のメソッドがコールされないため、それが必要なコンポーネントは改めて呼び出す必要があります。

// *Controller の beforeFilter で URLに 'admin' プリフィクスが存在する場合にのみ Auth コンポーネントをロードする例。
//
// beforeFilter よりも手前の時点で既にコレクションにある *Component::initialize() はコールされてしまっているため、
// ここで追加したコンポーネントは明示的に initialize メソッドを呼び出す必要がある。
public function beforeFilter() {
    parent::beforeFilter();
    if (!empty($this->request->params['prefix']) &&
        $this->request->params['prefix'] === 'admin') {
        $this->Auth = $this->Components->load('Auth');
        $this->Auth->initialize($this);
    }
}

基底クラス Controller の startupProcess メソッドで *Component の initialize メソッドがコールバックされるのですが、このような ComponentCollection::load() を用いた実行中のロードでは(たとえ beforeFilter メソッドであっても。アクションメソッドならなおさら)タイミング的に遅いため、処理の記述が必要になります。

コンポーネントに初期化が必要であるかどうかはそれぞれのコンポーネントの実装により異なりますが、気になる場合はかならず呼び出しておくと良いと思います。