2016-06-21 1 views
0

Je suis en train de tester un élément factice de mon propre avec un fournisseur de services, mais j'obtenir cette erreur:Fournisseur de service soulevant une erreur. La classe qu'il fournit, il ne le trouve pas

FatalErrorException in ProviderRepository.php line 146: Class 'Luismartin\Notificador\Notificador' not found

Ceci est la notificador classe, situé en fournisseur/luismartin/notificador/src/Notificador.php (j'ai couru une décharge-compositeur autoload après sa création):

<?php 
namespace Luismartin\Notificador; 

use Illuminate\Foundation\Auth\User; 
use Illuminate\Mail\Mailer; 


class Notificador 
{ 
    private $mailer; 

    public function __construct(Mailer $mailer) 
    { 
     $this->mailer = $mailer; 
    } 

    public function notificar(User $usuario, $mensaje) 
    { 
     // notifier actions... 
    } 

} 

son fournisseur de services , placé dans app/fournisseurs/NotificadorServiceProvider.php:

<?php 
namespace App\Providers; 

use Illuminate\Mail\Mailer; 
use Illuminate\Support\ServiceProvider; 
use Luismartin\Notificador\Notificador; 

class NotificadorServiceProvider extends ServiceProvider 
{ 

    public function register() 
    { 
     $this->app->singleton('Notificador', function() { 
      return new Notificador(new Mailer()); 
     }); 
    } 

} 

Il a été ajouté dans config \ app.php:

'providers' => [ 
    //..., 
    Luismartin\Notificador\Notificador::class, 
], 

Et enfin, le contrôleur méthode dans laquelle je suis essayant d'utiliser le composant notificador:

private function notificar($mensaje) 
{ 
     $admin = User::where('name', 'admin')->first(); 

     $notificador = App::make('Notificador'); 

     $notificador->notificar($admin, $mensaje); 
} 

Que dois-je faire?

J'ai également essayé de supprimer composer.lock et d'exécuter la mise à jour du composeur. Voici ce qu'il affiche à la fin:

Writing lock file 
Generating autoload files 
> Illuminate\Foundation\ComposerScripts::postUpdate 
> php artisan optimize 
PHP Fatal error: Class 'Luismartin\Notificador\Notificador' not found in /home/vagrant/Code/helpdesk/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository 
PHP Stack trace..... 
+0

Supprimez votre fichier composer.lock et réexécutez la mise à jour du composeur. Aussi, changer l'emplacement du fichier app.php en 'App/Providers/NotificadorServiceProvider :: class' (faites-le avant la mise à jour du composeur) –

+0

Comment ce paquet est-il installé? Compositeur? Si c'est le cas, gardez le fournisseur de services dans le dossier du fournisseur avec votre autre code. –

+0

J'ai supprimé composer.lock et exécuté la mise à jour du composeur. Il affiche également une erreur liée à ma classe. Je l'ai ajouté ci-dessus. –

Répondre

0

J'ai trouvé l'erreur. Je confondais la classe composante de la classe fournisseur de services lors de la déclaration dans la liste des fournisseurs:

'providers' => [ 
    //..., 
    App\Providers\NotificadorServiceProvider::class, 
], 

Maintenant, il fonctionne.