gpt4 book ai didi

php - cakephp 编辑字段值

转载 作者:行者123 更新时间:2023-11-29 08:56:08 25 4
gpt4 key购买 nike

我是 cakephp 的新手,但据我了解,所有数据库交互都应该在模型中进行。

我遵循了官方 cakephp 博客教程,但他们使用 Controller 而不是模型来保存、编辑和删除帖子。 http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/part-two.html

我正在尝试拆分程序,以便模型负责所有数据库交互。我能够让它保存新条目,但我似乎不知道如何编辑它们。

这是官方 cakephp 教程用于编辑帖子的原始操作。

public function edit($id = null) {
$this->Post->id = $id;
if ($this->request->is('get')) {
$this->request->data = $this->Post->read();
} else {
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash('Your post has been updated.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to update your post.');
}
}
}

所以,这是我的 Controller 操作。我的 Controller 名称是 ConcatenatesController,我的模型是 Concatenate。我最初用它来测试连接字符串。

 public function edit($id = null) {
$this->Concatenate->id = $id;
$this->Concatenate->editPost($id);
}

...以及与之配套的模型

 function editPost($id){
if ($this->save($this->request->data)) {
$this->Session->setFlash('Your post has been updated.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to update your post.');
}
}

我收到以下错误

Notice (8): Trying to get property of non-object [APP/Model/Concatenate.php, line 20] 
Fatal error: Call to a member function setFlash() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/cake/app/Model/Concatenate.php on line 24

第 20 行指的是

if ($this->save($this->request->data)) {

第 24 行是

  $this->Session->setFlash('Unable to update your post.');

最佳答案

Controller 未与数据库交互 directly就其本身而言,它是调用一个模型来代替它,这就是首先拥有 Controller 的意义所在。

像 session 、请求、文件上传等系统特定的东西被认为是应用程序逻辑,应该在 Controller 中。然后, Controller 控制应用程序如何与它们交互,而不是模型。

想象一下您正在使用的 PHP session $_SESSION ,那么您就有了一个用于您正在构建的移动应用程序的 ApiController,但不可能依赖 $_SESSION由于移动应用程序通常不发送 cookie,模型不应该知道或关心 session 是如何管理的, Controller 有责任维护用户状态并告诉模型执行与用户相关的操作。

另一个例子:保存帖子,它是 not模型有责任知道当前哪个用户已登录, Controller 有责任告诉模型哪个用户已登录,在蛋糕案例中,通过传递 fields => array('user_id', $this->Auth->user('id'))当调用 $this->User->save() 时。

文档是正确的,其中 Controller (通过 $this->ModelName->doStuff() )调用模型来完成其工作,而不是直接与数据库“交互”。

请阅读这些文章,虽然他们谈论的是业务逻辑和应用程序逻辑,但其中的插图应该可以帮助您:)

Application LogicBusiness Logic

关于php - cakephp 编辑字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com