LoginSignup
18
18

More than 5 years have passed since last update.

【CakePHP】自作コンポーネント

Last updated at Posted at 2014-11-04

使い方

app/Controller/Component配下にComponentクラスを継承したクラスを作成する。

<?php

//読み込み忘れずに
App::uses('Component', 'Controller');

//クラス名にはComponentをつける
class FooComponent extends Component {

  public function bar($one,$two){
    return $one + $two;
  }
}

通常のComponent同様、コントローラーから使用できる。
$componentsに使用するコンポーネントを定義する。「$this->コンポーネント名->メソッド」で呼び出す。
(定義する際も、呼び出す際もクラス名からComponentを除いて記述する。)

<?php
App::uses('AppController', 'Controller');

class HogesController extends AppController {
  public $components = ['Foo'];

  public function index(){
    $res = $this->Foo->bar(5,9);
  }

各種のコールバック

initialize()もしくは、startup()でControllerを取得してアクセスすると便利。
RequestクラスやControllerのさまざまなメソッドが利用できる。

class HogeComponent extends Component {

  public $controller;
  public $request;

  //beforeFileterの前に実行される
  public function initialize(Controller $controller){

  }

  //beforeFileterの後に実行される
  public function startup(Controller $controller){
    $this->controller = $controller;
    $this->request = $controller->request;
  }

  //beforeRenderの前に実行される
  public function beforeRender(Controller $controller){

  }

  //afterRenderの後に実行される
  public function shutdown(Controller $controller){

  }
}

コンポーネントからモデルを使用する

$HogeModel = ClassRegistry::init('HogeModel');
$data = $HogeModel->find('all');

コンポーネント内で他のコンポーネントを使う

コントローラーと同じ方法でコンポーネントを使うことができる。
用意されているコンポーネントも自作コンポーネントも使える。

public $components = array('Auth');

public function hoge() {
  $user = $this->Auth->user();
}

ただし、コンポーネント内から使われるコンポーネントのコールバック関数は実行されない。

参考:コンポーネントの中で他のコンポーネントを使用する

18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18