2017-09-13 3 views
1

j'ai créé un fournisseur de services nommé AdminServiceProviderLaravel 5.4: joindre le fournisseur de service personnalisé à un contrôleur

namespace App\Providers; 
use Modules\Orders\Models\Orders; 
use Illuminate\Support\ServiceProvider; 
use View; 
class AdminServiceProvider extends ServiceProvider 
    { 

     public function boot() 
     { 
      $comments = Orders::get_new_comments(); 
      View::share('comments', $comments); 
     } 
     public function register() 
     { 

     } 
    } 

Enregistré le fournisseur

App\Providers\AdminServiceProvider::class, 

Maintenant, j'essaie de l'attacher au contrôleur

namespace App\Http\Controllers\admin; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use App\Providers\AdminServiceProvider; 

class AdminController extends Controller 
{ 
    public $lang; 

    public function __construct() 
    { 
    } 

    public function index(){ 
     return view('admin/dashboard'); 
    } 
} 

Maintenant, j'obtiens ce message d'erreur

C'est la première fois que j'essaie d'utiliser un fournisseur de services personnalisé et je ne sais pas exactement comment cela fonctionne. Je suis sûr qu'il y a quelque chose qui manque. J'espère que vous pouvez aider. Merci d'avance.

[UPDATE]

utilisation supprimé App \ Providers \ AdminServiceProvider; du contrôleur

php artisan clear-compiled a résolu le problème mais je veux l'attacher à certains contrôleurs et non à tous les contrôleurs car les commentaires $ sont envoyés à tous les contollers de mon application. Alors, comment attacher le fournisseur de services à des contrôleurs spécifiques pas tous?

+0

php artisan compilé clair résolu le problème, mais je veux attacher à certains contrôleurs ne sont pas tous les contrôleurs –

+0

vérifier la réponse modifiée – Sletheren

Répondre

1

Pour la course Undefined variable: php artisan clear-compiled va résoudre

Si vous souhaitez partager une variable dans certaines de vos vues vous pouvez créer un middleware et l'affecter aux vues que vous souhaitez partager les données avec :

  • d'abord créer un middleware: php artisan make:middleware someName
  • Puis dans la fonction poignée vous ajoutez votre point de vue logique de partage:
$comments = Orders::get_new_comments(); 
view()->share('comments',$comments); 
return $next($request);  
  • Alors inscrivez-vous votre middleware sous le tableau $routeMiddleware et lui donner un alias.

Ensuite, fixez-le à vos routes comme:

Route::group(['middleware'=> 'yourMiddlewwareName'], function(){ 
    //your routes 
}); 
+0

Ce que je faisais, mais cherchait une solution simple pour ajouter le code une fois au lieu de le répéter dans chaque contrôleur d'administration. –

+0

bienvenue mon pote :) – Sletheren

1

Si vous avez toutes vos vues d'administration dans un répertoire (views\admin par exemple), vous pouvez utiliser compositeur vue en AdminServiceProvider:

public function boot() 
{ 
     view()->composer('admin.*', function($view){ 
      $view->with('comments', Orders::get_new_comments()); 
     }); 

} 

Il va attacher la variable comments à chaque vue de votre répertoire views\admin.

Vous pouvez également joindre une variable à des vues spécifiques ou des dossiers comme celui-ci:

view()->composer(['admin.posts.*', 'admin.pages.index'], function($view){ 
     $view->with('comments', Orders::get_new_comments()); 
});