【问题标题】:Issue using View()->Composer() in AppServiceProvider在 AppServiceProvider 中使用 View()->Composer() 的问题
【发布时间】:2018-06-18 07:02:21
【问题描述】:

我正在尝试使用 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:

未定义变量:当前

我可以在这里做什么?我可以将该数据从控制器和主视图传递到控制器吗?还是不可能?

【问题讨论】:

    标签: laravel laravel-5


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2014-07-29
      • 2017-10-09
      • 1970-01-01
      • 2016-05-19
      • 2020-12-14
      • 2011-01-09
      • 2022-06-16
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多