2014-01-16 5 views
0

Я хочу использовать метод сохранения для сохранения данных формы. но когда я вызываю save на объект, он дает следующую ошибку. Он отлично работает, если я вызываю метод insert на объекте. Фатальная ошибка: Вызов неопределенной методаZend framework save вместо обновления вставки

Application_Model_Content :: сохранить() в /var/www/html/ZendTecAdmin/application/controllers/AdminController.php на линии 44

Ниже мой контроллер код действия

$content = new Application_Model_Content(); 
      if($this->_request->getParams('id')){ 
      $id = $this->_request->getParams('id'); 
      $row = $content->find($id)->toArray(); 
      if($row){ 
      $form->populate($row[0]); 
      } 
      } 

    if ($this->_request->getPost('Publish')) { 
       $formData = $this->_request->getPost();   
       if ($form->isValid($formData)) { //If form data is valid 
        unset($formData['Publish']);     
        $content->save($formData); 
        //$content->insert($formData); //it works fine 
       } 
      } 

Ниже моя модель

<?php 
class Application_Model_Content extends Zend_Db_Table 
{ 
    protected $_name = "content"; 

} 

Пожалуйста, помогите мне, чтобы получить его решить.

+0

Там нет встроенного метода 'save' существует в Зенде. Если вы хотите, вам нужно создать одну проверку для [ссылки] (http://framework.zend.com/manual/1.12/en/learning.quickstart.create-model.html). – Rikesh

ответ

0

Он отлично работает, если писать код в содержание модели, как показано ниже

<?php 

class Application_Model_Content extends Zend_Db_Table { 

    protected $_name = "content"; 

    function save($data) { 

     if (null === ($id = $data['id'])) { 
      unset($data['id']); 
      $this->insert($data); 
     } else { 
      $this->update($data, array('id = ?' => $id)); 
     } 
    } 

} 

Есть ли другой стандартный способ сделать это?

1

Вы можете получить объект Row и использовать сохранить() на нем:

$select = $content->select()->where('id = ?',$id); 
$row = $content->fetchRow($select); 
$row->name = 'John' 
$row->birthdate = 1980-11-04; 
$row->save(); 

Продлить Row класса вы можете добавить protected $_rowClass = 'Application_Model_Row_User'; к вашей модели, а затем вы создаете class Application_Model_Row_User extends Zend_Db_Table_Row_Abstract. Теперь вы можете добавить свои собственные методы для этого класса, как это:

public function dateToAge(){ 
    return (int)floor((strtotime(date('Y-m-d')) - strtotime($this->birthdate))/31556926); 
} 

и позже:

$select = $content->select()->where('id = ?',$id); 
$row = $content->fetchRow($select); 
$name = $row->name 
$age = $row->dateToAge(); 

Вы можете прочитать здесь: http://framework.zend.com/manual/1.12/en/zend.db.table.row.html

+0

, который лучше всего использовать в качестве моего нижнего ответа или вашего? –

+0

Оба решения работают, поэтому вы можете выбрать то, что вам нравится. При использовании моего решения вы можете расширить класс Row и добавить дополнительные методы, которые могут быть полезны в больших проектах. – Volvox

+0

Вы можете изучить это: расширить класс Row и добавить дополнительные методы –

Смежные вопросы