我有意见:'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”'
答案 0 :(得分:1)
对于全局变量,您可以使用 viewComposer :
创建文件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);
}
}
创建文件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' => '*']);
}
}
在提供者数组
中的cofig / app.php中添加此行 App\Providers\ComposerServiceProvider::class,
在所有观看中使用$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