var $usesこれは、CakePHP 1.3+ で使用するには不適切な形式であると考えられています。App::import に置き換えられました (以下を参照) 。
User モデルの Users コントローラーと、Comment モデルの Comments コントローラーがあるとします。受け入れられるパターンは次のとおりです。
関連付けの使用
モデルを論理的に関連付けることができる場合は、これが最善の策です。
// models/user.php
Class User extends AppModel {
public $hasMany = array('Comment');
}
// controllers/users_controller.php
Class UsersController extends AppController {
function allComments() {
$this->User->Comment->find('all'); // You can use this across multiple models (e.g. $this->User->Comment->NestedComment->find('all');
}
}
モデル オブジェクトのインスタンス化
これにより、モデル ファイルが読み込まれ、インスタンスが CakePHP のオブジェクト マップに追加され、インスタンスが返されます。
// models/user.php
Class User extends AppModel {}
// models/comment.php
Class Comment extends AppModel {}
// controllers/users_controller.php
Class UsersController extends AppController {
function allComments() {
$Comments =& ClassRegistry::init('Comment');
$Comments->find('all');
}
}
$this->loadModel の使用
内部的にこれは ClassRegistry::init を使用し、モデルをコントローラーのプロパティとして追加します。
// models/user.php
Class User extends AppModel {}
// models/comment.php
Class Comment extends AppModel {}
// controllers/users_controller.php
Class UsersController extends AppController {
function allComments() {
$this->loadModel('Comment');
$this->Comment->find('all'); // using load model allows you to access it via $this->Model
}
}
アプリ::インポート
これは、ファイルを要求する CakePHP の方法です。オブジェクトをインスタンス化する必要があります。
// models/user.php
Class User extends AppModel {}
// models/comment.php
Class Comment extends AppModel {}
// controllers/users_controller.php
App::import('Model', 'Comment');
Class UsersController extends AppController {
function allComments() {
$Comment = new Comment();
$Comment->find('all');
}
}
これが役立つことを願っています。
編集: コントローラー内でモデル オブジェクトをグローバルに使用する場合は、beforeFilter().