我创建了一个名为AdminServiceProvider
的服务提供程序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]
删除使用App \ Providers \ AdminServiceProvider;来自控制器
php artisan clear-compiled解决了这个问题,但我想将它附加到一些控制器而不是所有控制器,因为$ comments被发送到我的应用程序中的所有控制器。那么如何将服务提供商连接到特定的控制器而不是所有控制器呢?
答案 0 :(得分:2)
对于未定义的变量运行: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
});
答案 1 :(得分:1)
如果您在一个目录中拥有所有管理员观看次数(例如views\admin
),则可以在AdminServiceProvider
中使用view composer:
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());
});