cakephp:博客教程扩展

cakephp:博客教程扩展,cakephp,blogs,Cakephp,Blogs,我试图扩展文档中的简单博客教程 我在/app/View/Users/index.ctp上有一个index.ctp,所有用户都会在每个用户名上显示一个链接。。。。当我点击用户名时,我希望它进入view.ctp并显示每个用户的博客帖子以及每个用户的帖子数量 我这里有个错误。我需要为此编写一个组件吗?如果是,我该怎么做 class UsersController extends AppController { public function view($id = null) { $this-

我试图扩展文档中的简单博客教程

我在/app/View/Users/index.ctp上有一个index.ctp,所有用户都会在每个用户名上显示一个链接。。。。当我点击用户名时,我希望它进入view.ctp并显示每个用户的博客帖子以及每个用户的帖子数量

我这里有个错误。我需要为此编写一个组件吗?如果是,我该怎么做

class UsersController extends AppController {
  public function view($id = null) {
   $this->set('allposts',$this->Post->findByUserId($id));
  }
}
因此,我在这里得到一个错误,因为它无法在用户模型中看到Post模型。我该怎么做


谢谢……

不,您不需要组件。如果你已经正确链接了你的模型(就是这样,设置belongsTos和hasMany(es)等),那么你必须通过连接来访问文章

$this->set('allposts',$this->User->Post->findByUserId($id));
关于这个,请看

现在,稍微扩展一下,因为您似乎对组件的实际功能有点困惑。组件是向控制器扩展或添加功能的一种方式。如果你想,比如说,创建一个新的Paginator,或者从你的控制器打电话给Facebook获取信息,但是没有明确的地方可以放这些信息(用户可以有Facebook信息,但是如果你有另一个名为“Friends”的控制器,你可能也必须在那里放一些Facebook功能)


通常,如果您认为需要一个组件从一个模型调用到另一个模型,这表明您组织的事情是错误的(这不是一般规则,我愿意举一些例子来说明这一点)。

顺便说一句,对于未来的问题,包括您得到的确切错误、堆栈跟踪、通知、警告等。如果模型没有链接,您还可以加载
Post
模型并查询它。使用
loadModel
App::uses
$this->uses=array('Post','User')
非常正确,但出于性能原因,我不鼓励
App::uses
loadModel
ClassRegistry::init()
是选项。我没有把它们添加到答案中,因为我认为OP只需要朝着正确的方向推动一下,而不是整个蛋糕。有关更多信息,请参见。感谢您指出,@cornelb:)
App::uses
用于延迟加载,您只需使用
$Post=new Post()创建对象不应该有任何性能问题您可以加载20个模型,并且您可以“延迟加载”它们,只需将两个数字相加即可。诚然,我自己还没有做过基准测试,所以我可能只是在散布坏消息,但从我所读到的(显然现在找不到那么多参考资料),这是最不推荐的选择。啊,,