Comment vous inscrire à un espace de noms avec des Silex de l'autochargeur
Je suis en train d'expérimenter la création d'une extension avec la Silex micro framework php pour l'authentification de l'utilisateur, mais je n'arrive pas à obtenir l'autochargeur de travail. Quelqu'un peut nous donner un indice?
J'ai une structure de répertoire comme ceci (tronquée)
usertest
|_lib
| |_silex.phar
| |_MyNamespace
| |_UserExtension.php
| |_User.php
|_www
|_index.php
Les bits de index.php, qui sert de bootstrap et le contrôleur frontal ressembler à ceci:
require '../lib/silex.phar';
use Silex\Application;
use MyNamespace\UserExtension;
$app = new Application();
$app['autoloader']->registerNamespace( 'MyNamespace', '../lib' );
$app->register( new UserExtension() );
La classe je suis en train de charger ressemble à ceci:
namespace MyNamespace;
use Silex\Application;
use Silex\ExtensionInterface;
class UserExtension implements ExtensionInterface {
public function register( Application $app ) {
$app['user'] = $app->share( function() use( $app ) {
return new User();
});
}
}
Tout assez simple, sauf qu'il met cette erreur:
Fatal error: Class 'MyNamespace\UserExtension' not found in /home/meouw/Projects/php/usertest/www/index.php on line 8
J'ai flirté avec symfony2 et ont suivi avec succès la instructions pour la configuration de l'universel, chargeur de classe, mais dans ce cas je suis perplexe. Ai-je raté quelque chose? Toute aide serait appréciée.
OriginalL'auteur meouw | 2011-05-30
Vous devez vous connecter pour publier un commentaire.
J'utiliserais
L'autochargeur est déconseillée dans les versions récentes de Silex, voir ma réponse pour une mise à jour.
votre réponse est aussi obsolète maintenant vérifier ma réponse pour le newsest solution
OriginalL'auteur malteo
Dans les versions récentes de Silex de l'autochargeur est obsolète et vous devriez vous inscrire à tous vos espaces de noms par le biais de la
composer.json
fichier qui omi est une meilleure solution parce que vous êtes la centralisation de votre chargement automatique des définitions.Exemple:
En fait, lorsque vous essayez d'accéder à l'autochargeur dans toute version récente de Silex suivantes RuntimeException est jeté:
Vous pouvez installer compositeur localement dans votre projet PHP, consultez getcomposer.org/doc/00-intro.md#locally
Je ne peux pas l'installer, il a besoin des droits d'admin. Ne pdsr-4 peut éviter de courir compositeur?
Si vous ne pouvez pas l'installer parce que vous ne pouvez pas exécuter php cli ou détendez-vous pouvez simplement télécharger le fichier PHAR à partir de getcomposer.org/download et le placer dans votre projet avec votre système de fichiers de l'explorateur
J'ai dû utiliser le psr-4 pour obtenir que cela fonctionne pour moi.
OriginalL'auteur ChrisR
C'est pourquoi vous devez utiliser le PSR-4 la syntaxe du compositeur.json
Class "Controllers\MyController" does not exist.
Vous avez besoin d'avoir une bonne structure de répertoire 🙂 et bien sûr le changement "\Vendor\\namespace": "/chemin"
A travaillé comme un charme! Et +1 sur le PSR-4 vs PSR-0.
OriginalL'auteur Robert
Inscrire les espaces de noms, il suffit d'appeler
registerNamespaces()
comme ceci:OriginalL'auteur Quentin
Ajout de l'énoncé approprié à la
autoload
section decomposer.json
et l'enregistrement des espaces de noms en appelant directementregisterNamespace
n'a pas de travail pour moi, jusqu'à ce que j'ai exécutécomposer update
dans le dossier de projets.OriginalL'auteur Alexander