CakePHP 3 における Controller, Table, Entity のネームスペース
CakePHP 3 では、ネームスペースを使用して Controller, Model (Table/Entity) を分離することで、アプリケーションの構造を整理できます。
Controller
routes.php
の prefix
にネームスペースを追加するには、 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');
まとめ
大規模アプリケーションを取り扱う時は、ネームスペースを利用してコードを構造的に整理すると良いかと思います。
この投稿が、お役に立てば幸いです。