Laravel如何在包含在主模板文件中的所有视图中传递数据?
在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)。