Lorsque vous utilisez une classe dans votre code, Laravel tente de retrouver la définition de cette classe dans l'espace de nom actuel (namespace du code dans lequel on veut utiliser ladite classe). Il s'agit du même principe que dans l'ensemble des langages de programmation qui utilisent les espaces de noms.
▼Publicité Le texte se poursuit plus bas
Alors comment fait-on pour utiliser une classe qui est définie dans un espace de nom différent ? C'est ce que vous allez découvrir dans cet article.
Prenons l'exemple d'une classe MaClasse qui a été définie dans l'espace de nom App\MaBibliotheque :
<?php
namespace App\MaBibliotheque;
class MaClasse
{
...
}
Dans le code suivant, Laravel tentera sans succès de retrouver MaClasse dans l'espace de nom App\Http\Controllers :
<?php
namespace App\Http\Controllers;
class ProduitsController extends Controller
{
public function index() : View
{
...
}
...
}
Si la classe avait été définie dans le même espace de nom que le code qui tente de l'utiliser, tout aurait fonctionné normalement.
Mais dans le cas présent, comme la classe n'a pas été définie dans le même espace de nom, vous obtiendrez l'erreur « Class 'App\Http\Controllers\MaClasse' not found ». Ceci démontre clairement à quel endroit Laravel a recherché la classe.
Trois choix s'offrent alors à vous :
$monObjet = new \App\MaBibliotheque\MaClasse;
ou
use App\MaBibliotheque\MaClasse;
...
$monObjet = new MaClasse;
ou
{
"name": "laravel/laravel",
...
"autoload": {
"classmap": [
"database",
"app/MaBibliotheque"
],
"psr-4": {
"App\\": "app/"
}
},
...
}
Suivi de l'instruction qui demande de recharger le tout :
composer dump-autoload
Site fièrement hébergé chez A2 Hosting.