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 :)

6 réponses


kewai
Réponse acceptée

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();
mxmaxime
Auteur
Réponse acceptée

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 :)

Tu n'aurais pas des namespace et des imports définit ?

Moi ca fonctionne niquel

mxmaxime
Auteur

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.