【CakePHP3】Controllerから自作Modelを利用する方法




CakePHP3のMVCモデルでは、原則としてビジネスロジックをモデルに書き込むことが望ましいとされています。

しかし、うっかりコントローラにビジネスロジックを書きすぎて肥大化してしまったので、自作のModelを作成して移植しようとしました。

つまずいたポイントは、「どうやってControllerからModelにアクセスするの?」という点でした。

とりあえず完成コード

コントローラー(src/Controller/HogeController.php)

<?php
namespace App\Controller;

use Cake\Controller\Controller;
use App\Model\Logic\HogeLogic; //ここが重要

class HogeController extends Controller
{
  public function index()
  {
    $HogeLogic = new HogeLogic();
    echo $HogeLogic->test();
  }
}

モデル(src/Model/Logic.php)

<?php 
namespace App\Model\Logic; //ここが重要

class HogeLogic
{
  public function test()
  {
    return 'Hello World';
  }
}

名前空間を利用して自作Modelにアクセスする

CakePHP3ではcomposer.jsonでオートローダーの設定が行われており、名前空間「App」とディレクトリ「src」が対応付されています。(※オートローダーとは自動でファイルを読み込んでくれる機能です)

そのため、例えばsrc/Model/Logic.phpに対しては「App\Model\Logic」という名前空間が対応しています。

そのため、自作モデルをnamespaceでApp\Model\Logicという名前空間に登録し、コントローラ側でuseをすることで、自作モデルのクラスを利用することが出来ます。