web-dev-qa-db-fra.com

Erreur de mise à niveau de composant 2.5 à 3.0

J'essaie de mettre à niveau un composant de la version 2.5 à la version 3.x. Mais ce faisant, je reçois une erreur du fichier controller.php. Le message d'erreur ressemble au suivant: Erreur fatale: appel d'une fonction membre get () sur un non-objet dans /home/abs/public_html/joomla34/administrator/components/com_refix/controller.php à la ligne 20 Voici le code de fichier controller.php:

defined('_JEXEC') or die;

class PrefixController extends JControllerLegacy {
/**
 * constructor
 * 
 * @access public
 */
public function __construct() {

    require_once JPATH_COMPONENT . '/helpers/prefix.php';
    JFactory::getApplication()->input->get('view', $this->input->get('view', 'tableprefix'));
    parent::__construct();
    $view = $this->input->get('view');
    PrefixHelper::addSubMenu((isset($view)) ? $view : '');
}

/**
 * check new table prefix
 * 
 * @access private
 * @return boolean
 */
private function checkTablePrefix() {
    $new_prefix = $this->input->get('new_prefix');
    if(!preg_match('/^[a-zA-Z]+[a-zA-Z0-9_]*$/',$new_prefix)) {
        return false;
    } else {
        return true;
    }
}

/**
 * rename table prefix and update configuration.php file
 * 
 * @access public
 */
public function update() {
    $msg = '';
    if(!$this->checkTablePrefix()) {
        $msg = '<span class="prefix_error">' . JText::_('COM_PREFIX_PREFIX_NEW_PREFIX_DESC') . '</span>';
    } else {
        $model = $this->getModel('tableprefix');
        $new_prefix = $this->input->get('new_prefix');
        if($model->renamePrefix($new_prefix)) {
            $msg .= JText::_('COM_PREFIX_SUCCESS:TABLE_PREFIX_ALREADY_UPDATED');

            // update configuration file
            if($this->input->get("update_config") == '1') {
                // backup configuration file
                if($this->input->get("backup_before") == '1') {
                    $msg .= "<br />";
                    if($model->backupConfig()) {
                        $msg .= JText::_('COM_PREFIX_SUCCESS:BACKUP_THE_CONFIGURATION.PHP_FILE');
                    }  else {
                        $msg .= '<span class="prefix_error">' . JText::_('COM_PREFIX_ERROR:CONFIGURATION.PHP_FILE_COULD_NOT_BE_BACKUP') . '</span>';
                    }
                }

                $msg .= "<br />";
                if($model->editConfig($new_prefix)) {
                    $msg .= JText::_('COM_PREFIX_SUCCESS:CONFIGURATION_FILE_HAS_BEEN_UPDATED');
                }  else {
                    $msg .= '<span class="prefix_error">' . JText::_('COM_PREFIX_ERROR:CONFIGURATION_FILE_COULD_NOT_BE_UPDATE,PLEASE_MANUAL_UPDATE') . '</span>';
                }
            }
        } else {
            $msg .= '<span class="prefix_error">' . JText::_('COM_PREFIX_ERROR:TABLE_PREFIX_COULD_NOT_BE_UPDATE') . '</span>';
        }
    }
    ob_end_clean();
    JResponse::setHeader("Pragma", "no-cache");
    JResponse::setHeader("Expires","0");
    echo $msg;
    exit;
} // end function    
}
2
indy

Ce n’est pas votre problème à 100%, mais vous n’avez pas de méthode d’affichage et vous n’appelez pas non plus la méthode d’affichage super classe. Essayez de changer cette méthode:

public function __construct() {

À:

public function display($cachable = false, $urlparams = false) {
    require_once JPATH_COMPONENT . '/helpers/qtableprefix.php';
    $this->input = JFactory::getApplication()->input;
    $this->input->get('view', $this->input->get('view', 'tableprefix'));
    $view = $this->input->get('view');
    QTablePrefixHelper::addSubMenu((isset($view)) ? $view : '');
    parent::display($cachable, $urlparams);
    return $this
}

Voyez si cela corrige votre problème.

3
Brian Bolli

Line 20 a l'air bien foiré. Je ne suis pas sûr de ce que vous essayez de faire avec ça? En général, l'erreur est due au fait que vous n'avez pas défini $ this-> input:

essayez d'utiliser ceci à la place:

public function __construct() {

    require_once JPATH_COMPONENT . '/helpers/qtableprefix.php';
    $this->input = JFactory::getApplication()->input;
    $this->input->get('view', $this->input->get('view', 'tableprefix'));
    parent::__construct();
    $view = $this->input->get('view');
    QTablePrefixHelper::addSubMenu((isset($view)) ? $view : '');
}

notez que

$this->input->get('view', $this->input->get('view', 'tableprefix'));

ne fera rien car vous n'affectez pas l'entrée à une variable. Pour autant que je sache, vous pouvez simplement supprimer complètement la ligne.

3
Rob Clayburn