web-dev-qa-db-fra.com

ReflectionException: la classe ClassName n'existe pas - Laravel

Dès que je tape la commande php artisan db:seed

Je reçois Erreur J'aime:

[ReflectionException]
La classe UserTableSeeder n'existe pas 

root@dd-desktop:/opt/lampp/htdocs/dd/laravel# php artisan db:seed

Voici ma page UserTableSeeder.php & DatabaseSeeder.php

UserTableSeeder.php

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class UserTableSeeder extends Seeder
{    
    public function run()
    {
        DB::table('users')->delete();
        User::create(array(
        'name'     => 'Chris Sevilleja',
        'username' => 'sevilayha',
        'email'    => '[email protected]',
        'password' => Hash::make('awesome'),
        ));
    }    
}

DatabaseSeeder.php

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //Model::unguard();

        Eloquent::unguard();
        $this->call('UserTableSeeder');

        //$this->call(UserTableSeeder::class);

        //Model::reguard();
    }
}

Je réfère ce site Lien Pour concevoir et développer la page de connexion . S'il vous plaît, aidez-moi à résoudre ce problème. Merci.

28
Nana Partykar

Effectuez un composer update, puis composer dump-autoload.

Si ce qui précède ne résout pas le problème, modifiez le fichierclassmapdans votre fichier composer.json de sorte qu'il contienne le chemin d'accès relatif au projet vers vos fichiers php:

"autoload-dev": {
    "classmap": [
        "tests/TestCase.php",
        "database/seeds/UserTableSeeder.php" //include the file with its path here
    ]
}, /** ... */

et peu de temps après, effectuez un composer dump-autoload, et cela devrait maintenant fonctionner comme un breeze!

Edité par @JMSamudio

Si composer dump-autoload est introuvable, activez simplement cette option composer config -g -- disable-tls true.

90

D'après mon expérience, cela apparaîtra la plupart du temps lorsque la classe que vous essayez d'appeler a des bogues et ne peut pas être compilée. Veuillez vérifier si la classe qui n'est pas reflétée peut être exécutée seule.

10
Kamaro Lambert

Un composer dump-autoload devrait résoudre ce problème.

8
fsavina

J'ai eu ce problème et je pourrais le résoudre en faisant php artisan config:cache. Le problème était que j'avais déjà exécuté cette commande précédemment et incluais plus tard de nouvelles classes de segmentation. Les configurations mises en cache ne reconnaissaient pas les nouvelles classes. Donc, exécuter à nouveau cette commande a fonctionné.

Si vous voyez que vous apportez des modifications fréquentes pour inclure de nouvelles classes de segmentation, envisagez d'exécuter php artisan config:clear. Cela vous permettra d’apporter autant de modifications que vous le souhaitez et, après le test, de réexécuter config:cache pour que les choses fonctionnent à nouveau de manière optimale.

4
Sriram Ranganathan

J'ai le même problème avec un class. J'essaie composer dump-autoload et php artisan config:clear mais je ne résous pas mon problème.

Ensuite, j'ai décidé de lire mon code pour trouver tout problème, ain je trouve le problème. Le problème dans mon cas ne manque que des virgules dans ma classe. Voir mon code de modèle:

{
    protected
    $fillable = ['agente_id', 'matter_id', 'amendment_id', 'tipo_id'];

    public
    $rules = [
        'agente_id' => 'required', // <= See the comma
        'tipo_id' => 'required'
    ];

    public
    $niceNames = [
        'agente_id' => 'Membro', // <= This comma is missing on my code
        'tipo_id' => 'Membro'
    ];
}
3
Luciano Braga

Pour une raison quelconque, j'ai dû exécuter composer dumpautoload -o. Avis drapeau -o qui signifie avec optimisation. Je ne sais pas pourquoi ça marche seulement avec ça, mais essayez-le. Peut-être que ça aide quelqu'un.

2
Jaroslav Klimčík

Je n'écris pas comme réponse à cette question. Mais je veux aider les autres s'ils sont confrontés au même bogue mais les réponses mentionnées ici ne fonctionnent pas. J'ai aussi essayé toutes les solutions mentionnées ici. Mais mon problème était avec lenamespacej'ai utilisé. Le chemin était mauvais.

L'espace de nom que j'ai utilisé est:

namespace App\Http\Controllers;

Mais en réalité, le contrôleur réside dans un dossier nommé 'FrontEnd'

la solution est donc de changer le namespace en:

namespace App\Http\Controllers\Frontend;
1
Abhi

essayez d'utiliser la commande suivante

php artisan db:seed --class=DatabaseSeeder
1
easycodingclub

Vous devez l'assigner à un espace de noms pour le trouver.

namespace App\Http\Controllers;
1
G-Man

J'ai recréé la classe et cela a fonctionné. Copiez tout le contenu du fichier, supprimez le fichier et exécutez php artisan make:seeder ModelTableSeeder. Parce que composer dump-autoload n'a pas fonctionné pour moi. 

0
М.Б.

mise à jour du compositeur 

Above Command travaille pour moi.

Chaque fois que vous effectuez une nouvelle migration dans laravel, vous devez actualiser "class map" dans le fichier composer.json.

0
KNK

Lorsqu'il recherche le fichier de classe Seeder, vous pouvez exécuter composer dump-autoload . Lorsque vous l'exécutez à nouveau et qu'il recherche le modèle, vous pouvez le référencer dans le fichier de segmentation lui-même. Ainsi,

use App\{Model};
0
Kent Aguilar
composer dump-autoload 

cela va le réparer

0
Richard kortby

Pas strictement lié à la question mais a reçu l'erreur ReflectionException: Class config does not exist

J'avais ajouté une nouvelle variable .env avec des espaces. Lancer php artisan config:clear m'a dit que toute variable .env contenant des espaces devrait être entourée de "s.

Est-ce que cela et ma candidature ont de nouveau fonctionné, pas besoin de configuration comme toujours en développement sur Laravel Homestead (5.4)

0
Scott Brown

Vous pouvez essayer d'écrire app en use en majuscule, donc App. Travaillé pour moi.

0
Epsilon47