我在主布局中有局部视图,这是导航栏。我有一个变量$userApps
。此变量检查用户是否已启用应用程序(true),如果已启用,则我希望在导航栏中显示应用程序的链接。
主页扩展了master.layout,其中包括partials.navbar
我在navbar.blade.php中的代码是:
@if ($userApps)
// display link
@endif
但是我得到未定义的变量错误。如果我在带有控制器的普通视图中使用它,它在我声明变量并将控制器路由到视图后工作正常。我不认为我可以将控制器放到布局中,因为我无法将控制器路由到局部视图,所以我如何优雅地做到这一点?
答案 0 :(得分:10)
您使用的是什么版本的Laravel?应该是这样的:
@include('partials.navbar', ['userApps' => $userApps])
只是为了测试我在本地做了它并且它有效:
routes.php文件
Route::get('/', function () {
// passing variable to view
return view('welcome')->with(
['var' => true]
);
});
资源/视图/ welcome.blade.php
// extanding layout
@extends('layouts.default')
资源/视图/布局/ default.blade.php
// including partial and passing variable
@include('partials.navbar', ['var' => $var])
资源/视图/分音/ navbar.blade.php
// working with variable
@if ($var == 'testing')
<h1>Navbar</h1>
@endif
所以问题必须在其他方面......检查路径和变量名称。
答案 1 :(得分:3)
其他答案对我不起作用,或者似乎仅对旧版本有效。对于较新的版本(例如Laravel 7.x),语法如下。
在父视图中:
@include('partial.sub_view', ['var1' => 'this is the value'])
在子视图中:
{{ $var1 }}
答案 2 :(得分:0)
这种方法非常简单:
在父视图中:
@include('partial.sub_view1', [$var1='This is value1'])
在子视图中:
{{ $var1 }}
答案 3 :(得分:0)
@include('您的视图地址',array('视图中的变量,例如:id = $ something'=>'此变量的值'))
答案 4 :(得分:0)
我已经回答了所有问题,但是下面是最好的方法,因为您也可以在serviceProvider中运行查询。
您需要创建单独的服务,也可以使用AppServiceProvider
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::composer('layouts.admin-layout', function ($view) {
$view->with('name', 'John Doe');
});
}
}
在您的布局中
{{$name}}
答案 5 :(得分:0)
您可以使用视图编辑器将变量发送到局部视图。 查看 laravel.com 上关于视图作曲家的 laravel 文档。 您也可以查看以下链接以帮助您解决此问题。 https://scotch.io/tutorials/sharing-data-between-views-using-laravel-view-composers