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

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

Takahiro Iwasa
(岩佐 孝浩)
Takahiro Iwasa (岩佐 孝浩)
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');
Takahiro Iwasa
(岩佐 孝浩)

Takahiro Iwasa (岩佐 孝浩)

Software Developer at iret, Inc.
主に AWS を利用したクラウドネイティブアプリケーションの設計および開発をしています。 Japan AWS Top Engineers 2020-2023