如何从laravel刀片中的父视图中获取变量

时间:2017-01-05 21:51:09

标签: laravel blade laravel-blade

我有意见:'default.blade.php','about.blade.php','contacts.blade.php'。

'about.blade.php'和'contacts.blade.php'扩展'default.blade.php'。

如何在'default.blade.php'中定义变量$ root并在扩展'default.blade.php'的所有视图中使用它? (我必须只使用刀片,而不是视图作曲家,控制器等)

所以,

'default.blade.php':

@php
    $root = 'RootDirectory';
@endphp

'about.blade.php'和'contacts.blade.php':

@extends('layouts.default')
{{ $root }}

引发错误,例如'未定义变量“root”'

2 个答案:

答案 0 :(得分:1)

对于全局变量,您可以使用 viewComposer

  1. 创建文件app/Http/Composers/RootComposer.php

    namespace App\Http\Composers;
    use Illuminate\Contracts\View\View;
    class RootComposer {
       public function __construct(){
          $this->root= 'RootDirectory';
       }
       public function compose(View $view){
          $view->with('root', $this->root);
       }
    }
    
  2. 创建文件app/Providers/ComposerServiceProvider.php

    namespace App\Providers;
    use Illuminate\Support\ServiceProvider;
    use View;
    class ComposerServiceProvider extends ServiceProvider {
       public function boot(){
          View::composers(['App\Http\Composers\RootComposer' => '*']);
       }
    }
    
  3. 在提供者数组

    中的cofig / app.php中添加此行

    App\Providers\ComposerServiceProvider::class,

  4. 在所有观看中使用$root

答案 1 :(得分:0)

您可以使用视图外观的共享方法轻松地将数据共享到所有视图。您可以在 AppServiceProvider 的引导方法中执行此操作:


namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::share('root', 'rootDirectory');
    }
}

然后在您的任何视图文件中,您都可以直接访问数据:

{{$root}}

你也可以传递一组数据:

View::share('data', ['root'=>'rootDirectory','others'=>'otherDirectory']);

然后像这样评估它们: {{$data['root']}}{{$data['otherDirectory']}}

你可以在文档中找到这个 https://laravel.com/docs/8.x/views#sharing-data-with-all-views