Hello,
J'ai de nouveau un problème, très étrange avec une variable..
J'explique :
J'ai une variable, qui se créé dynamiquement, qui va servir un instancier une class.
Voici le vardump d'un exemple de cette variable : (nom variable = $controller_name)
string 'IndexController' (length=15)
Lorsque je fais :
$instance = new $controller_name();
J'ai une erreur de type, la class n'est pas trouvée / n'existe pas (not found..)
Mais, là vient le plus étrange, lorsque je copie la valeur de la variable, et fait manuellement :
$instance = new IndexController();
ça fonctionne..
Help? Merci :)
Emix, justement il ne comprend pas l'import de ton namespace. Fait le test en static
namespace Core\Controller;
use \App\Controller;
$name1 = 'pageController';
new $name1();
$name2 = '\App\Controller\pageController';
new $name2();
Bonsoir,
Merci à vous tous, c'était un problème de namespace qui n'était pas chargé.
(pour info à @connected, en effet merci j'ai tout remis à plat. J'ai créé un singleton pour la gestion d'indépendance avec ma variable $app, qui doit être passé dans beaucoup de class ;) )
Pour conclure (si quelqu'un a le même problème) :
J'avais l'inclusion de mon namespace comme ceci :
use monnamespace;
Et lorsque je voulais créer une instance d'une class avec une variable (pour être dynamique), étant dans ce namespace, j'avais une erreur "class not found" :
$controllerName = $traitement . "Controller";
$controller = new $controllerName(); // error...
J'ai donc charger avec le namespace :
$controllerName = '\monnamespace\ ' . $action . 'Controller';
$controller = new $controllerName(); // fonctionne :)
Oui un namespace, mais avant de gérer sa gestion, j'ai tout simplement mit use \namespace ,
le namespace est celui pour accéder à IndexController()
Essaye les double guillemets pour $controller_name du genre $controller_name = "IndexController"
Bonjour,
je pense que du devrais tout remettre à plat avant de partir dans tous les sens... Le code tel que le propose kewai est une bonne piste, et surtout créer un factory juste pour instancier le controleur est selon une mauvaise idée : tu ne vas l'utiliser qu'une seule fois dans ton code.
Bref, ce n'est qu'un conseil.
Bon courage.