Joomla.it Forum
Non solo Joomla... => Sviluppo => : tomtomeight 29 Sep 2016, 16:13:06
-
Con questa riga di codice nel file helper
if (!$appId) {
$_session = self::getmysession (); <-- linea 72
$appId=$_session->get( 'datagrillappId');
}
Ottengo:
Deprecated: Non-static method datagrillHelper::getmysession() should not be called statically, assuming $this from incompatible context in ....../components/com_datagrill/helpers/datagrillhelper.php on line 72
public function getuserpermissions () {
$appId= datagrillhelper::retrieveID(); <-- linea 95
$possiblepermissions=parse_ini_file('xataface/permissions.ini');
$user = &JFactory::getUser();
foreach ($possiblepermissions as $permission=>$option) {
$asset='com_datagrill.application.'.(int) $appId;
$joomlapermission='datagrill.'.$permission;
if ($user->authorise($joomlapermission,$asset)){
$userpemissions[$permission]=1;
} else {
$userpemissions[$permission]=0;
}
}
return ($userpemissions);
}
Ottengo: Deprecated: Non-static method datagrillHelper::retrieveID() should not be called statically, assuming $this from incompatible context in ......../components/com_datagrill/helpers/datagrillhelper.php on line 95
In un altro file:
class conf_ApplicationDelegate {
function getPermissions(&$record){
$perms= datagrillhelper::getuserpermissions(); <-- linea 4
return $perms;
}
Ottengo: Deprecated: Non-static method datagrillHelper::getuserpermissions() should not be called statically, assuming $this from incompatible context in .........../components/com_datagrill/conf/ApplicationDelegate.php on line 4
Non riesco a trovare documentazione idonea a risolvere.
uso php V5.6.25
Chiedo anche se questo mi comporta il malfunzionamento della implementazione della aggiunta controllo ACL nel componente.
Grazie come sempre.
-
non so se dà problemi però non funziona sicuramente
Non-static method datagrillHelper::getmysession() should not be called statically,
-------------------------------------------------------------------
vuol dire che puoi chiamare staticamente (::) solo metodi statici ovvero se vai a vedere la dichiarazione di getmysession sarà public function e non public static function.
Perchè sia corretto ti chiede che la classe datagrillHelper vada prima istanziata tipo $myhelper = newdatagrillHelper(); e poi $xxx = $myhelper->getmysession();
-
Questa l'intera classe:
public function retrieveID ($dgsetup=null){
// first try: get the appId from the parameters passed to this function
$datagrillsetup=$dgsetup['_datagrillsetup'];
$appId=$datagrillsetup['appId'];
// next try : get the appId from Joomla's session cookie
if (!$appId) {
$_session = self::getmysession ();
$appId=$_session->get( 'datagrillappId');
}
// next try: get the appId from Xataface's config table
if (!$appId) {
$app = Dataface_Application::getInstance();
$conf= $app->conf();
$datagrillsetup=$conf['_datagrillsetup'];
$appId=$datagrillsetup['appId'];
}
// if still no appId -> error
if (!$appId) {
die ('Error initialising application: could not determine ID');
}
return $appId;
}
dove apporto le modifiche?
-
quello è un metodo non statico di una classe che però non vedo...
$_session = self::getmysession ();
--------------------------------------------------
quel self è una scorciatoia quando sei all'interno della classe statica per poter usare la classe stessa... ma se non è statica o non contiene il metodo statico...
-
public function getmysession () {
if (!isset($_mainframe)) {
$_mainframe = JFactory::getApplication('site');
$_mainframe->initialise();
}
$_session = JFactory::getSession();
return $_session;
}
e questo l'intero file allegato
-
quindi la classe che sarebbe meglio fosse statica ma in realtà non lo è è datagrillHelper e il metodo è getmysession();
staticamente chiameresti $session = datagrillHelper::getmysession();
altrimenti devi avere la classe caricata (usi un framework che dovrebbe avere l'autoload), istanziata e usata
$data = new datagrillHelper();
$session = $data->getmysession();
o se fosse nell'oggetto
$session = $this->getmysession();
static, public, private protected sono attributi di funzioni e classi che non sono opzionali, pena instabilità