从CakePHP中的控制器调用模型方法

时间:2013-11-20 22:17:46

标签: cakephp model-view-controller

在CakePHP的Model方法中,是否无法将Model实例作为对象(而不是数组)进行访问?作为一个超级简化的例子,我的直觉告诉我应该做这样的事情:

Bird.php
...
public function specialName()
{
    $name = $this->name;
    return "Oh wow! It's ".$name;
}

如果我从我的BirdController.php中调用此方法,如下所示:

public function view($id) {
    if (!$id) {
        throw new NotFoundException(__('Invalid bird'));
    }

    $this->Bird->id = $id;
    $this->set('results', $this->Bird->specialName()); 
}

...然后它在视图文件中显示为“哦哇!它是鸟”而不是“哦哇!它是Freddy”(即模型的名称,而不是模型实例的名称)。

我尝试过这种一般方法的变体,但无济于事。我似乎必须通过数组访问信息,如下所示:

Bird.php
...
public function specialName($id)
{
    $data = $this->findById($id);
    $name = $data['Bird']['name'];
    return "Oh wow! It's ".$name;
}

这对我来说似乎过于复杂。我错过了什么?最终,我希望能够在我的模型函数中访问依赖模型,例如得到所有相关的鸟类>亚种。看起来使用对象会更容易。

1 个答案:

答案 0 :(得分:0)

如果您已阅读有关模型的文档,您会知道Model :: $ name是模型的名称。还有Model :: alias,它是通过关联访问模型时的模型名称,并且该关联的名称与模型名称不同。

Cakes ORM不会将结果作为数据对象返回,3.0会这样做。现在返回特定字段的最简单方法是在模型中执行此操作:

public function specialName($id) {
    $this->id = $id;
    return $this->field('name');
}

此外,“哦哇......”应该转到您将回显您设置为$ result的名称的视图。

如果你想要数据对象,我知道有一个插件,一种将结果集转换为数据对象的行为。只是谷歌吧。

  

最终我希望能够在我的模型中访问依赖模型   功能,例如得到所有相关的Bird->亚种。

你读过这本书了吗? See this sectionWith containable您可以控制从关联模型中获取的确切内容。

我建议您先做博客教程,了解CakePHP的基本工作原理。