Според урока за книгата cakephp, действия като актуализация на базата данни се извършват в контролера чрез проверка дали $id е зададено в ulr път, ако е така, се извършва запазване. По време на това действие cakephp се нуждае от $this->id, което се чете от базата данни с помощта на $this->Model->find();
По време на този процес $this->request->data се използва силно в контролера. Струва си да се спомене, че моделът няма достъп до $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;
}
}
Благодаря ви за предложенията.