BLOG

Blitz Gateスタッフブログ

BLOG

CakePHP3でComponentを使う方法+α

書いた人:

CakePHP3  

test2

どうも、ゆんゆんです。

 

長らく更新できなかったのですが、地味にいろいろありました。
その中でも実際に使用した、CakePHP3でのComponentの継承をご紹介します。

 

Componentファイルの作り方

 

Componentファイルは/src/Controller/Componentディレクトリに格納します(デフォルト設定の場合)
直接ファイルを作っても良いですが、ここはComposerがありますので、bakeしてみましょう。

#CakePHP3のベースディレクトリに移動して行います
./bin/cake bake component Vehicle

/src/Controller/Component/VehicleComponentファイルができましたか?
この調子で「CarComponent」「BikeComponent」ファイルを作りましょう。

 

Componentファイルの編集(Vehicle)

VehicleComponentはCarComponentとBikeComponentの親となるComponentファイルにします。
ですので、下記のように編集してみましょう。

namespace App\Controller\Component;

use Cake\Controller\Component;
use Cake\Controller\ComponentRegistry;

/**
 * Vehicle component
 */
class VehicleComponent extends Component
{
    /**
     * Default configuration.
     *
     * @var array
     */
    protected $_defaultConfig = [];

    // ここから追加 ----------
    public $tire = 0;

    public function getTire()
    {
        return $this->tire;
    }
    // ここまで追加 ----------
}

 

次に「CarComponent」ファイルを編集します。

namespace App\Controller\Component;

use Cake\Controller\Component;
use Cake\Controller\ComponentRegistry;

// ここから追加 ----------
use App\Controller\Component\VehicleComponent;
// ここまで追加 ----------

/**
 * Car component
 */
// 継承するファイルを変更
//class CarComponent extends Component
class CarComponent extends VehicleComponent
{
    /**
     * Default configuration.
     *
     * @var array
     */
    protected $_defaultConfig = [];

    // ここから追加 ----------
    public $tire = 4;
    // ここまで追加 ----------
}

これでタイヤの数が4になりましたね。
CarComponent同様に、BikeComponentを編集しましょう。
タイヤの数は 2 です。

 

ControllerからComponentを使用する

作成したComponentファイルをControllerから使用してみましょう。
ControllerもComponent同様、bakeしましょう。

#CakePHP3のベースディレクトリに移動して行います
./bin/cake bake controller Garage

GarageControllerが作成されましたか?
このGarageControllerからCarComponentとBikeComponentファイルを呼び出します。
 
下記のように、大幅に修正します。

namespace App\Controller;

use App\Controller\AppController;

// ここから追加 ----------
use Cake\Controller\ComponentRegistry;
use App\Controller\Component\CarComponent;
use App\Controller\Component\BikeComponent;
// ここまで追加 ----------

/**
 * Garage Controller
 *
 * @property \App\Model\Table\GarageTable $Garage
 */
class GarageController extends AppController
{
    // ここから追加 ----------
    public function initialize()
    {
        parent::initialize();

        $this->CarComponent = new CarComponent(new ComponentRegistry(), []);
        $this->BikeComponent = new BikeComponent(new ComponentRegistry(), []);
    }

    public function checkCarTire()
    {
        echo $this->CarComponent->getTire();
        exit();
    }

    public function checkBikeTire()
    {
        echo $this->BikeComponent->getTire();
        exit();
    }
    // ここまで追加 ----------
}

これでそれぞれのタイヤの数が数えられます。
checkCarTireとcheckBikeTireのアクションにアクセスしてみましょう。
それぞれ4と2が出れば成功です。

 

さいごに

いかがでしたか?
継承に関してはなかなか難しいところもありますが、慣れるとコードの記述量が減り、スムーズな開発ができますね。

 

ではではー♪

  • このエントリーをはてなブックマークに追加