8791 sujets

Développement web côté serveur, CMS

Bonjour,

(Je deviens fou, surement parce que je passe trop de temps sur l'ordi et qu'il faudrait que j'aie m'aérer pour voir ce qui cloche Smiley smile )

J'ai un problème de namespace.

J'utilise Laravel et j'ai créé un dossier Lib/Gestion dans lequel je mets mes fichiers relatifs à la gestion.
Dedans j'ai notamment ces deux-ci

PlaceGestion.php

<?php namespace Lib/Gestion
...
class PlaceGestion{
...
$gestion = new ShopGestion;
}
?>


et ShopGestion
<?php namespace Lib/Gestion
...
class ShopGestion{
...}
?>


Dans mon fichier PlaceGestion, j'instancie un objet ShopGestion, malheureusement cette classe est introuvable. J'ai essayé 10 trucs différents surement une dizaine de fois qui va du simple 'use ShopGestion' au 'use \Lib\Gestion\ShopGestion' mais j'ai toujours cette erreur car il ne trouve pas ma classe. J'avoue être à cours d'idée ou tout simplement perdu Smiley smile .

Si quelqu'un sait m'éclairer,

Merci d'avance Smiley smile .
Modifié par Pitou (23 Dec 2014 - 15:15)
Bonjour,

Normalement oui, j'utilise PSR-0

	"autoload": {
		"classmap": [
			"app/commands",
			"app/controllers",
			"app/models",
			"app/database/migrations",
			"app/database/seeds",
			"app/tests/TestCase.php"
		],
		"psr-0": {
			"Lib": "app"
    	}
	},


Et lorsque j'appelle ces classes depuis par exemple mon contrôleur, je n'ai pas de soucis.

Exemple, ceci marche très bien :

<?php

use 
Lib\Validation\PlaceCreateValidator as PlaceCreateValidator;
use Lib\Validation\PlaceUpdateValidator as PlaceUpdateValidator;
use Lib\Gestion\PlaceGestion as PlaceGestion;

class PlaceController extends BaseController {
...
new PlaceGestion;
...
}
Je vois que tu test PlaceGestion dans ton contrôleur mais ShopGestion c'est ok ?
Sinon c'est quoi exactement le message d’erreur ?
Salut, en stoppant quelques minutes et en testant un peu ce que tu m'as dit. J'ai remarqué que je pouvais appelé ShopGestion sans problème (sans le use) dans mon modèle ^_^.

En fait j'instancie comme ceci ma classe :

$name_gestion = $place->places_type.'Gestion';
		$child_gestion = new $name_gestion;


Si je remplace $name_gestion par ShopGestion, ça marche il trouve bien la classe. Erreur de syntaxe surement. Je suppose qu'on ne peut pas faire ainsi en PHP ^_^.

Merci, ça m'a bien aidé à chercher ailleurs pour trouver Smiley smile .
a écrit :
J'ai remarqué que je pouvais appelé ShopGestion sans problème (sans le use) dans mon modèle ^_^.
Oui vu que la class est dans le même namespace.

a priori pas de problème pour instancier une class dynamiquement.

Pour info use Lib\Gestion\PlaceGestion as PlaceGestion; peut être remplacé par use Lib\Gestion\PlaceGestion