2017-09-13 82 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()); 
    });