Laravel如何在包含在主模板文件中的所有视图中传递数据?

12 浏览
0 Comments

Laravel如何在包含在主模板文件中的所有视图中传递数据?

我有一个主模板文件,被不同的控制器和不同的视图调用。在页脚中,显示了类别列表,那么如何在所有控制器的方法中传递数据,而不需要在所有函数中编写代码和传递数据呢?

0
0 Comments

在Laravel中,有时我们需要在所有视图中共享一些数据。这个问题的出现是因为在主模板文件中如何传递数据给所有包含的视图。解决方法是使用视图组合器(view composers)。

在文件app/Providers/AppServiceProvider.php的boot方法中,我们可以获取所有的分类并将其共享给所有视图和控制器。具体代码如下:

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Auth;
use DB;
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     *  void
     */
    public function boot()
    {
         // 共享键值对数据
         View::share('key', 'value');
         Schema::defaultStringLength(191);
         
         // 获取分类数据
        $categories = DB::table('categories')->get();
        
        // 将分类数据共享给视图
        View::share('categories', $categories);  
    }
    
    /**
     * Register any application services.
     *
     *  void
     */
    public function register()
    {
        //
    }
}

现在,我们可以在所有视图和控制器中通过`$categories`变量访问分类数据。例如,在页脚中可以这样使用分类数据:

@foreach ($categories as $category)
   

{{ $category->name }}

@endforeach

这就是所谓的视图组合器(view composers),通过这种方式我们可以在所有视图中共享特定的数据。更多详情可以参考[Laravel官方文档](https://laravel.com/docs/5.6/views#view-composers)。

0