[英]Multiple controllers with a single model
我想做的继承人
我有一张桌子,上面放着许多不同类型的数据。 型号名称为“对象”
例如 :
row 1 : item_type = event
row 2 : item_type = news
row 3 : item_type = booking
我想编写一个控制器'event_controller'并与其一起使用'Object'模型,并且仅处理event_types类型。 和新闻的另一个控制器(news_controller),并使用相同的模型。
我如何在cakephp上执行此操作。
我从codeigniter进入蛋糕,在CI中,我们可以将所需的任何模型加载到任何控制器中,我可以对cake做类似的事情吗?
在CakePHP 1.3+中使用var $uses
被认为是差的形式。 它已由App :: import代替( 请参阅下文 )
假设您有一个带User模型的Users控制器和一个带Comment模型的Comment控制器。 可接受的模式是:
使用关联
如果可以在逻辑上关联模型,那么这是您最好的选择。
// 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()
指定的任何这些模式。
我建议您不要$uses
语句。 取而代之的是,您可以使用$this->Model->M0del1->....->someFunc();
等模型的关系$this->Model->M0del1->....->someFunc();
如果该关系存在。
如果模型之间的关系不存在,则只需使用$this->loadModel('ModelName');
在任何需要的地方使用特定功能。
如果使用var $uses = array('Object');
它成为控制器的全局变量,它将为控制器的所有操作加载该模型,无论您是否需要它。 这会影响您的表现。
如果使用$this-LoadModel('ModelName');
在特定功能中,它将仅在该功能中加载而不是在所有操作中加载。
您声明控制器,并在其上声明$ uses变量,如下所示:
var $uses = array('Object');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.