例如,我想在默认视图中添加一个变量(default.blade.php)
我当然可以将我的变量直接定义到视图文件中,如下所示:
@php ($user = Sentinel::getUser())
但不建议这样做。
我应该在AppServiceProvider.php上添加吗? (https://laravel.com/docs/5.4/views#sharing-data-with-all-views)
但是哪个电话?像这样:
public function boot()
{ $user = Sentinel::getUser(); }
此获取:未定义的变量:user
public function boot()
{ View::share('user', Sentinel::getUser()); }
这得到了试图获取非对象的属性,因此Sentinel并没有真正声明
或在控制器中
public function __construct()
{
//user
$user = Sentinel::getUser();
view()->share('user',$user);
}
我也尝试进入我的控制器
public function boot()
{
return view('layouts/default')->with('user', Sentinel::getUser(););
}
或
public function boot() {
view()->composer('layouts.default', function($view) {
$view->with('user', Sentinel::getUser());
});
}
仍然得到"未定义的变量:user"
答案 0 :(得分:1)
我们的想法是在服务提供商的引导方法中调用View :: XXXXX ......
最简单的方法是在应用服务提供商的视图上调用共享...这将使其可供所有视图使用...但请注意,此值何时得到解决,它将在启动时解决...
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::share('key', 'value');
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
您还可以创建一个视图编辑器,它将在渲染特定视图或视图集之前运行...您可以为其提供视图/类或视图/闭包......这将在视图渲染之前进行评估...
绑定视图作曲家类:
public function boot()
{
// Using class based composers...
View::composer(
'profile', 'App\Http\ViewComposers\ProfileComposer'
);
}
或者附上一个封闭......然后做你需要的东西来启动那个封闭......
public function boot()
{
// Using Closure based composers...
View::composer('dashboard', function ($view) {
//
});
}
你可以绑定到View :: share等所有视图,但是在你的情况下使用一个简单的基于闭包的作曲家......将评估推到视图渲染之前......
// Using Closure based composers...
View::composer('dashboard', function ($view) {
$view->with('user', Sentinel::getUser() );
});
希望这会有所帮助......
答案 1 :(得分:0)
在你的控制器中,定义一个类似的函数:
public function index() {
$user = Sentinel::getUser();
//The parameter of the view is your blade file relative to your directory
//resources/views/default.blade.php
return view('default')->with('user', $user);
}
在您的web.php(路线文件)中,添加此
//First parameter is the url, second is the controller/function
Route::get('/', 'YourControllerName@index');
现在在localhost [可选]
中测试视图