【问题标题】:Creating fat models using CRUD methods in cakephp在 cakephp 中使用 CRUD 方法创建胖模型
【发布时间】:2014-06-10 10:41:50
【问题描述】:

根据 cakephp 书籍教程,通过检查 ulr 路径中是否设置了 $id 来在控制器中进行诸如数据库更新之类的操作,如果是则执行保存。在这个动作中,cakephp 需要 $this->id,使用 $this->Model->find() 从数据库中读取 wchich;

在这个过程中,$this->request->data 在控制器中被大量使用。值得一提的是,Model 无法访问 $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;
}
}

感谢您的建议。

【问题讨论】:

    标签: cakephp cakephp-2.0


    【解决方案1】:

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

        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 查找或连接时减少了很多代码

    【讨论】:

    • 感谢您的回复。我已经这样做了,但我知道我正在将控制器代码减少 2 或 3 行......但是谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多