我正在尝试使用AppServiceProvider
中的启动方法将数据传递到视图,并按照其中一个Laracast基础视频中列出的步骤进行操作。但是,在尝试使用此变量时,我的控制器出现错误。
在我的AppServiceProvider中:
public function boot()
{
view()->composer('home', function($view){
$view->with('current', Post::orderBy('created_at', 'desc')->first());
});
}
因此,据我所知,这应该将数据传递到我的主视图,因此我不需要在控制器中为该视图使用的所有方法中继续引用它。然后我有一个带有以下方法的homeController:
public function index()
{
//Get user
$user = Auth::user();
//OMDB API setup - Get Movie name, remove spaces, add into API request
$movie_one = str_replace(" ", "+", $current->movie_one);
$movie_two = str_replace(" ", "+", $current->movie_two);
return view('home', compact(array('user')));
}
之前我在这个方法中添加了一个名为current
的变量来从我的Post
表中获取一个条目,但是想要将它添加到AppServiceProvider
中,因为我必须重新也可以在其他方法中声明它。我遇到的问题是我尝试在此方法中再次使用$current
对象,但它不可用?我收到以下错误:
ErrorException in homeController.php line 30:
未定义的变量:当前
我可以在这做什么?我可以将数据传递给控制器以及主视图吗?或者那是不可能的?
答案 0 :(得分:1)
您在boot
方法中编写的代码只能在主视图中访问,如果您也想访问内部控制器Post object
,您必须遵循此操作,通过此方法您可以访问控制器中的Post
对象,视图一样。
app()->singleton('current',function($app){
return Post::orderBy('created_at', 'desc')->first();
});
因此,在您的代码中,您可以像这样访问Post
对象,
$post_obj = App::make('current');
$post_obj->movie_two;
或直接
App::make('current')->movie_two;