Създаване на дебели модели с помощта на CRUD методи в cakephp

Според урока за книгата 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;
}
}

Благодаря ви за предложенията.


person user2610146    schedule 10.06.2014    source източник


Отговори (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 да намира или се присъединява

person CoolLife    schedule 10.06.2014
comment
Благодаря за отговора. Вече го правя, но знам, че намалявам кода на контролера с 2 или 3 реда... Но благодаря. - person user2610146; 10.06.2014