在cakephp中使用CRUD方法创建胖模型

时间:2014-06-10 10:41:51

标签: cakephp cakephp-2.0

根据cakephp书籍教程,通过检查是否在ulr路径中设置了$ id,在控制器中进行了数据库更新等操作,如果是,则执行save。在此操作期间,cakephp需要$ this-> id,wchich使用$ this->模型 - > find();

从数据库中获取

在此过程中,$ this-> request->数据在控制器中得到充分利用。值得一提的是,该模型没有加入$ this-> request-> data。

我的问题是:您是否有自己的策略来在CRUD操作期间创建瘦控制器和胖模型?

我有一个大用户控制器来执行CRUD操作,但此操作所需的模型很薄。

在我看来,像下面这样的动作是在控制器上复制的,我正在寻找在模型中编写更多代码的方法。

以下是在控制器中多次复制的控制器方法示例(基本上,只有模型名称在所有操作中都会被更改)

public function strona_edytuj($id = null)
{
$this->loadModel('Page');
//$this->render('strona/strona_edytuj');
if (!$id) {
    $this->recursve = 0;
    $data = $this->Page->find('all');
    $this->set('data', $data);
    $this->render('strona/strona_pokaz_wszystkie');
    return false;
}
$post = $this->Page->findById($id);
if (!$post) {
    throw new NotFoundException(__('Nie ma takiej strony !'));
}
if ($this->request->is(array('post', 'put'))) {
    $this->Page->id = $id;
    if ($this->Page->save($this->request->data)) {
        $this->Session->setFlash(__('Strona została zaktualizowana.'));
        $this->redirect(array('controller' => 'users', 'action' => 'strona_edytuj'));
    }
    $this->Session->setFlash(__('Wystąpił błąd. Spróbuj ponownie.'));
}
if (!$this->request->data) {
    $this->request->data = $post;
}
}

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

您可以通过模型中的更多函数来减少代码,例如,如果您需要调用模型详细信息,只需将函数放入模型中,然后将控制器上的火焰放入。 我处理模型获得的数据的唯一驱动程序。

    public function strona_edytuj($id = null)
    {

    $post = $this->Page->name_of_your_function($id);
    if (!$post) {
        throw new NotFoundException(__('Nie ma takiej strony !'));
    }
    if ($this->request->is(array('post', 'put'))) {
        $this->Page->id = $id;
        if ($this->Page->save($this->request->data)) {
            $this->Session->setFlash(__('Strona została zaktualizowana.'));
            $this->redirect(array('controller' => 'users', 'action' => 'strona_edytuj'));
        }
        $this->Session->setFlash(__('Wystąpił błąd. Spróbuj ponownie.'));
    }
    if (!$this->request->data) {
        $this->request->data = $post;
    }

}
在您的页面模型中

public function name_of_your_function($id)
{
   return $this->findById($id);     
}

在FindByid查找或加入时减少了太多代码