根据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;
}
}
感谢您的建议。
答案 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查找或加入时减少了太多代码