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
}
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.
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.