J'essaie de créer une classe simple dans un Laravel fraîchement installé. Pour cela, j'ai créé un dossier app/Convert et y ai mis le fichier php. La classe ressemble à ceci:
<?php
namespace App\Convert;
class Converter
{
public function __construct()
{
...Code
}
}
Maintenant, quand j'essaie d'y accéder à partir de Tinker:
use App\Convert\Converter;
new Converter;
Je reçois:
PHP Fatal error: Class 'App/Convert/Converter' not found in Psy Shell code on line 1
Qu'est-ce que je fais mal? Si je comprends bien laravel devrait exécuter automatiquement les fichiers dans le dossier de l'application et ses sous-dossiers ou je me trompe?
EDIT: Désolé la première fois que je l'ai mal écrit (j'ai juste tellement joué avec les espaces de noms, donc j'ai pris la mauvaise version). Le problème était en fait que le nom du fichier était autre chose que Converter.php, donc quand je l'ai changé en Converter.php, les choses ont commencé à changer. Je définirais la réponse du Devon comme la bonne réponse s'il la mettait comme réponse et non comme commentaire. Alors écrivez-le ici:
Le nom du fichier contenant la classe doit être le même que le nom de la classe. Et le chemin d'accès au fichier est le même que le chemin de l'espace de noms. (voir le commentaire de Matthew sous sa réponse)
Votre espace de noms dans la classe diffère de la façon dont vous essayez de l'importer. Vous le définissez comme App\Convert
Là. Vous devez l'importer en tant que App\Convert\Converter
.
Le nom de classe complet d'une classe comprend l'espace de noms ET le nom de classe. Ainsi, par exemple, si vous avez une classe appelée Bar
avec un espace de noms de App\Foo
, le nom de classe complet est App\Foo\Bar
, et pour pouvoir l'utiliser en tant que Bar
, vous devez l'importer comme suit:
use App\Foo\Bar;
De plus, comme Devon l'a dit ci-dessous, vous devez avoir le fichier contenant la classe à app/Foo/Bar.php
pour la configuration par défaut Laravel autoloader pour le récupérer.
il faut parfois vider le cache, cette commande fonctionnait dans mon cas:
composer dump-autoload
J'espère que ça marche pour toi aussi
cordialement