2017-09-13 112 views
1

我創建了一個名爲AdminServiceProvider服務提供商Laravel 5.4:將自定義服務提供商控制器

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() 
     { 

     } 
    } 

註冊的供應商

App\Providers\AdminServiceProvider::class, 

現在,我嘗試將它連接到控制器

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'); 
    } 
} 

現在我得到這個錯誤信息

Undefined variable: comments 

這是我第一次嘗試使用自定義服務提供程序,但不知道它是如何工作的我確信有一些缺失希望您可以提供幫助。提前致謝。

[UPDATE]

除去使用應用\提供商\ AdminServiceProvider;從控制器

PHP工匠明確編譯的解決了這個問題,但我想它附加到某些控制器不是所有的控制器爲$意見在我的應用程序發送給所有contollers。那麼如何將服務提供者附加到特定的控制器上,而不是全部?

+0

PHP工匠明確編譯的解決了這個問題,但我想它附加到某些控制器不是所有的控制器 –

+0

檢查修改答案 – Sletheren

回答

1

對於未定義的變量運行:php artisan clear-compiled會解決它

如果你想在你的一些看法共享變量您可以創建一箇中間件,並將其分配給您想分享數據的看法:在手柄功能php artisan make:middleware someName

  • 然後添加你的視野共享的邏輯:

    • 首先創建一箇中間件
    $comments = Orders::get_new_comments(); 
    view()->share('comments',$comments); 
    return $next($request);  
    
    • 然後註冊您的中間件$routeMiddleware陣列之下, 給它的別名。

    然後將其連接到你的路線,如:

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

    那是我正在做的,但是正在尋找一個簡單的解決方案來添加代碼一次,而不是在每個管理控制器中重複它。 –

    +0

    歡迎夥伴:) – Sletheren

    1

    如果你有一個目錄(views\admin例如),您可以使用View Composer在AdminServiceProvider所有管理員的觀點:

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

    它將comments變量附加到每個視圖在views\admin目錄。

    您還可以將變量附加到一些具體的意見或文件夾是這樣的:

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