2015-07-01 4 views
5

napisać funkcję edycji w celu zaktualizowania aktualności za info, mój kod:
to funkcja plik kontroler:stanie aktualizować dane w bazie danych za pośrednictwem formularza CakePHP

public function editnews($id) { 
    $this->layout = "news"; //tynemc call by this statement 
    $this->loadModel('News'); //model call 
    $this->loadModel('Category'); //load news category 
    if ($this->request->is('post')) { 
     if (move_uploaded_file($this->request->data['News']['image_url']['tmp_name'], WWW_ROOT . 'media/'. $this->request->data['News']['image_url']['name'])) { 

      $this->request->data['News']['image_url'] = time() . $this->request->data['News']['image_url']['name']; 
     }$this->News->save($this->request->data['News']);//data save by this statement 
     $msg = '<div class="alert alert-success"> 
     <button type="button" class="close" data-dismiss="alert">&times;</button> 
     <strong> News update successfully </strong> 
     </div>'; 
     $this->Session-> setFlash($msg); 
     return $this->redirect('editnews'); 
    } 
    if (!$this->request->data) { // id wise data search 
     $data = $this->News->findById($id); 
     $this->request->data = $data; 

    } 
    $this->set('categories', $this->Category->find("list"));//categories load in dropdown 
} 

to kod forma plik CTP działanie:

<?php echo $this->Form->create('News', array(
         'inputDefaults' => array(
          'label' => false, 
          'div' => false 
         ), 
         'id' => 'form-validate', 
         'class' => 'form-horizontal', 
         'novalidate' => 'novalidate', 
         'enctype' => 'multipart/form-data', 
         'controller' => 'admins', 
         'action' => 'editnews' 
          ) 
        ); 
        ?> 

Nie edytowałem tytułu, obrazu, newslettera, nie mogę zapisać informacji o aktualnościach, dlaczego to działa i jak mogę poprawić moją funkcję edycji rekordu?

Odpowiedz

2

Myślę, że stoisz przed problemem związanym z formą działania. spróbuj tego kodu do działania.

<?php 

        echo $this->Form->create("News",array(
         'inputDefaults' => array(
          'label' => false, 
          'div' => false 
         ), 
         'url' => array(
          'controller' => 'admins', 
          'action' =>'editnews' 
          ), 
         'id' => 'form-validate', 
         'class' => 'form-horizontal', 
         'novalidate' => 'novalidate', 
         'enctype' => 'multipart/form-data' 
         ) 
        ); 
       ?> 

i wypróbuj ten kod jako funkcję.

public function editnews($newsid = null) { 
     $this->layout = "news"; 
     $this->loadModel('News'); 
     $this->loadModel('Category'); 
     $this->News->id = $newsid; 
     if ($this->request->is('get')) { 
      $this->request->data = $this->News->read(); 
     } 
     else { 
      $data = $this->request->data; 
      } 
      if ($this->News->save($data)) { 
       $this->Session->setFlash("Newsletter angelegt"); 

       $msg = '<div class="alert alert-success"> 
       <button type="button" class="close" data-dismiss="alert">&times;</button> 
       <strong> News update successfully </strong> 
       </div>'; 
       $this->Session->setFlash($msg); 
       $this->redirect(array('controller' => "admins", "action" => "manage_newses")); 
      } 
      else 
      { 
       $this->Session->setFlash("not updated"); 
       $this->render(); 
      } 
     } 
     if (!$this->request->data) { 
      $data = $this->News->findById($id); 
      $this->request->data = $data; 

     } 
     $this->set('categories', $this->Category->find("list"));} 
+1

dziękuję, ale nie mogę zaktualizować pola obrazu !!! –

+1

tak. Wiem, że skomentowałem ten kod. Oto kod przeniesienia obrazu i aktualizacji. Umieść ten kod w funkcji. if (move_uploaded_file ($ data ['News'] ['image_url'] ['tmp_name'], WWW_ROOT. 'media /'. $ data ['News'] ['image_url'] ['name'])) { $ data ['News'] ['image_url'] = $ data ['News'] ['image_url'] ['name']; } –

0

Należy spróbować debugowania kodu trochę:

Spróbuj var_dump na move_uploaded_file zobaczyć co zwraca.

Również var_dump $ this-> request-> data ['News'] i proszę umieścić wyniki tutaj, może nie zapisać z powodu danych, które wysyłasz. Jeśli identyfikator twojego modelu nie jest ustawiony, CakePHP nie będzie wiedział, co zapisać/edytować.

Jeśli nie można var_dump, można użyć $ this-> log ($ myVar 'debug'), a następnie sprawdzić plik w app/tmp/log/debug.log

Na innej notatki , zwykle lepiej jest umieścić HTML w widokach, a nie w kontrolerze (ale to bardziej dla twojej osobistej wiedzy).