2011-01-03 13 views
0

Ich schreibe eine benutzerdefinierte Komponente für meine Arbeit. Ich benutze Hallo Komponente für den Aufbau. Wenn ich ein Formular bearbeiten und speichern Sie es mir diesen Fehler:Joomla Funktion Bind Problem

Call to a member function bind() on a non-object

Mein Code:

function save() 
{ 
    global $option; 

    JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_abc'.DS.'tables'); 
    $row =& JTable::getInstance('abc', 'Table'); 
    if(!$row->bind(JRequest::get('post'))) 
    { 
     JError::raiseError(500, $row->getError()); 
    } 
    $row->message = JRequest::getVar('message', '','post', 'string', JREQUEST_ALLOWRAW); 

    if(!$row->store()){ 
     JError::raiseError(500, $row->getError()); 
    } 

    switch($this->_task) 
    { 
     case 'apply': 
      $msg = 'Change Saved'; 
      $link = 'index.php?option='.$option.'&task=edit&cid[]='.$row->id; 
      break; 
     case 'save': 
      $msg = 'Saved'; 
      $link = 'index.php?option='.$option; 
      break; 
     default: 
    } 
    $this->setRedirect($link, $msg); 
} 

Das Problem ist, dass es nicht in der Lage ist, eine Instanz zu erstellen.

Bitte lassen Sie mich wissen, wenn jemand eine Lösung kennt.

Danke.

Antwort

1

Das Problem ist, dass Sie die Methode 'bind' aufrufen, die nicht in der Variablen $ row existiert. Sie haben $ row definiert als: $ row = & JTable :: getInstance ('abc', 'Table'); was bedeutet, dass dein Problem genau dort beginnt. Es versucht Datenbankinhalte abzurufen, die fehlschlagen. Ich schlage vor, Sie ändern die Parameter 'abc' und 'Table' zu etwas Realem, es sieht für mich wie Beispieldaten aus.

0

Meine Tabellennamensdaten, die abgerufen werden sollen, sind jos_abc. Die Speicherfunktion befindet sich in my_componet/controller.php. Der Klassenname des Controllers ist XyzController:

class XyzController extends JController { 

    function __construct() { 
     //Get View 
     if(JRequest::getCmd('view') == '') { 
      JRequest::setVar('view', 'default'); 
     } 
     $this->item_type = 'Default'; 
     parent::__construct(); 
    } 

    function save() 
    { 
     global $option; 

     JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_tripplanner'.DS.'tables'); 
     $row1 =& JTable::getInstance('xyz', 'jos_abc'); 
     if(!$row1->bind(JRequest::get('post'))) 
     { 
      JError::raiseError(500, $row->getError()); 
     } 
     $row->message = JRequest::getVar('message', '','post', 'string', JREQUEST_ALLOWRAW); 

     if(!$row->store()){ 
      JError::raiseError(500, $row->getError()); 
     } 

     switch($this->_task) 
     { 
      case 'apply': 
       $msg = 'Change Saved'; 
       $link = 'index.php?option='.$option.'&task=edit&cid[]='.$row->id; 
       break; 
      case 'save': 
       $msg = 'Saved'; 
       $link = 'index.php?option='.$option; 
       break; 
      default: 

     } 
     $this->setRedirect($link, $msg); 
    } 
} 

selbst dann speichern Ich bin nicht in der Lage, I „auf eine Elementfunktion bind() aufrufen, auf einem Nicht-Objekt“ zu bekommen.

+0

bekam ich die Lsg Dank –

1

Der folgende Code wird Ihnen helfen:

function addComment($option) 
{ 
    global $mainframe; 
    $row =& JTable::getInstance('comment' , 'Table'); 
    if (!$row->bind(JRequest::get('post'))) 
    { 
    JError::raiseError(500, $row->getError()); 
    } 

    $row->comment_date = date ('Y-m-d H:i:s'); 

    $user =& JFactory::getUser(); 

    if($user->id) 
    { 
    $row->user_id = $user->id; 
    } 

    if(!$row->store()) 
    { 
    JError::raiseError(500, $row->getError()); 
    } 

    $link = JRoute::_('index.php?option='.$option.'&id='.$row->id . '&task=view'); 
    $mainframe->redirect($link, 'Comment Added'); 

}