CakePHP 3 における Controller, Table, Entity のネームスペース

CakePHP 3 における Controller, Table, Entity のネームスペース

岩佐 孝浩
岩佐 孝浩
2 min read
CakePHP

CakePHP 3 では、ネームスペースを使用して Controller, Model (Table/Entity) を分離することで、アプリケーションの構造を整理できます。

Controller

routes.phpprefix にネームスペースを追加するには、 App\Controller\<NAMESPACE> の形式を使用します。

$routes->connect('/employees', [
    'prefix'     => '<NAMESPACE>',
    'controller' => 'Employees',
    'action'     => 'index',
    '_method'    => ['GET'],
    '_ext'       => 'json',
]);

Table

TableRegistry::get()

TableRegistry::get の引数を指定する際には、 ...Table を含む完全修飾名を指定してください。

$table = TableRegistry::get('App\Model\Table\<NAMESPACE>\EmployeesTable');

Table->initialize()

デフォルトでは、テーブルのエイリアスは完全修飾名です。 エイリアスとして完全修飾名を使用したくない場合は、 initialize() メソッドをオーバーライドできます。

public function initialize(array $config)
{
    parent::initialize($config);
    $this->alias('Employees');
}

Association definition

belongsTo, hasOne, hasMany, belongsToMany を使用して関連を定義する際には、 className...Table を含む完全修飾名を指定してください。

$this->belongsTo('Estimates', [
    'className'    => 'App\Model\Table\<NAMESPACE>\CompaniesTable',
    'propertyName' => 'company',
]);

Entity

エンティティクラスを指定するには、 Table->entityClass() を使用できます。 Table->entityClass() の引数を指定する際には、完全修飾名を指定してください。

$this->entityClass('App\Model\Entity\<NAMESPACE>\Employee');

まとめ

大規模アプリケーションを取り扱う時は、ネームスペースを利用してコードを構造的に整理すると良いかと思います。

この投稿が、お役に立てば幸いです。

岩佐 孝浩

岩佐 孝浩

Software Developer at KAKEHASHI Inc.
AWS を活用したクラウドネイティブ・アプリケーションの要件定義・設計・開発に従事。 株式会社カケハシで、処方箋データ収集の新たな基盤の構築に携わっています。 Japan AWS Top Engineers 2020-2023