Bonjour,

Je développe actuellement un site web sous cakephp et j'ai un petit problème. Je viens de créer une fonction qui permet de rajouter "class="active"" lorsque l'url corresponds à celle indiqué.

function active($url){
        if($url == $this->here || $url != '/' && preg_match("$url/i", $this->here)){
            echo 'class="active"';
        }
    }

J'ai placé cette fonction dans mon AppController, et pour l'appeler depuis mon layout, j'ai fais ceci :

<a href="/"><li <?php AppController::active('/'); ?>>Accueil</li></a>

Ça fonctionne très bien, mais j'ai tout de même une erreur qui s'affiche :

Strict (2048): Non-static method AppController::active() should not be called statically, assuming $this from incompatible context [APP/View/Layouts/default.ctp, line 31]

En l'attente d'une réponse, je continu mes tests ;)

5 réponses


Mtd
Auteur
Réponse acceptée

Problème réglé :

Je me suis créé un helper "Function", dans lequel je mettrais des fonctions générales utilisables partout sur le site, dans lequel j'y est mis ma fonction active. J'appelle ensuite ma fonction depuis le layout :

echo $this->Function->active();

Et si tu fais :

public function active($url){
    if($url == $this->here || $url != '/' && preg_match("$url/i", $this->here)){
        echo 'class="active"';
    }
}
Mtd
Auteur

J'avais déjà fait le test, j'ai la même erreur.

Ça me parait normal, tu fais appel a une fonction en mode static alors qu'elle n'est pas static...
Donc change ton appel de fonction, ou change la en static...

@+

Mtd
Auteur

Comment je peux faire pour l'appeler autrement? Si je met ma fonction en static, je ne peux plus utiliser le "$this->here".