CakePHP3でComponentを使う方法+α
どうも、のえるです。
長らく更新できなかったのですが、地味にいろいろありました。
その中でも実際に使用した、CakePHP3でのComponentの継承をご紹介します。
Componentファイルの作り方
Componentファイルは/src/Controller/Componentディレクトリに格納します(デフォルト設定の場合)
直接ファイルを作っても良いですが、ここはComposerがありますので、bakeしてみましょう。
1 2 |
#CakePHP3のベースディレクトリに移動して行います ./bin/cake bake component Vehicle |
/src/Controller/Component/VehicleComponentファイルができましたか?
この調子で「CarComponent」「BikeComponent」ファイルを作りましょう。
Componentファイルの編集(Vehicle)
VehicleComponentはCarComponentとBikeComponentの親となるComponentファイルにします。
ですので、下記のように編集してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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」ファイルを編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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しましょう。
1 2 |
#CakePHP3のベースディレクトリに移動して行います ./bin/cake bake controller Garage |
GarageControllerが作成されましたか?
このGarageControllerからCarComponentとBikeComponentファイルを呼び出します。
下記のように、大幅に修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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が出れば成功です。
さいごに
いかがでしたか?
継承に関してはなかなか難しいところもありますが、慣れるとコードの記述量が減り、スムーズな開発ができますね。
ではではー♪
- おすすめ記事
POPULAR
のえる
Full-stack Developer