Php Laravel-如何将变量传递到布局局部视图
我在主布局中有一个局部视图,它是导航栏。我有一个变量Php Laravel-如何将变量传递到布局局部视图,php,laravel,model-view-controller,Php,Laravel,Model View Controller,我在主布局中有一个局部视图,它是导航栏。我有一个变量$userApps。此变量检查用户是否已启用应用程序(true),如果已启用,则我希望在导航栏中显示指向该应用程序的链接 主页扩展了master.layout,其中包括partials.navbar 我在navbar.blade.php中的代码如下: @if ($userApps) // display link @endif 但是,我得到一个未定义的变量错误。如果我在普通视图中与控制器一起使用它,那么在声明变量并将控制器路由到视图后
$userApps
。此变量检查用户是否已启用应用程序(true),如果已启用,则我希望在导航栏中显示指向该应用程序的链接
主页扩展了master.layout,其中包括partials.navbar
我在navbar.blade.php中的代码如下:
@if ($userApps)
// display link
@endif
但是,我得到一个未定义的变量错误。如果我在普通视图中与控制器一起使用它,那么在声明变量并将控制器路由到视图后,它可以正常工作。我不认为我可以将控制器放置到布局中,因为我无法将控制器路由到局部视图,所以如何优雅地执行此操作?您使用的是什么版本的Laravel?您的案例应该是这样的:
@include('partials.navbar', ['userApps' => $userApps])
出于测试目的,我在本地进行了测试,结果很有效:
routes.php
参考资料/views/welcome.blade.php
参考资料/views/layouts/default.blade.php
参考资料/views/partials/navbar.blade.php
//使用变量
@如果($fooVar=='bar')
导航栏
@恩迪夫
所以问题一定出在其他方面。检查路径和变量名。这种方法非常简单: 在父视图中:
@include('partial.sub_view1', ['This is value1' => $var1])
{{ $var1 }}
在子视图中:
@include('partial.sub_view1', ['This is value1' => $var1])
{{ $var1 }}
其他答案不适用于我,或者似乎只适用于旧版本。对于较新的版本,如Laravel7.x,语法如下所示 在父视图中:
@include('partial.sub_view', ['var1' => 'this is the value'])
在子视图中:
{{ $var1 }}
我已经阅读了所有答案,但下面是最好的方法,因为您还可以在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');
});
}
}
可以使用视图生成器将变量发送到局部视图。 查看laravel.com上关于view composer的laravel文档。 您还可以查看以下链接,以帮助您解决此问题。
我使用5.2。我试过了,但还是不行。我是否也必须将变量添加到@extend from the view to master中?使用视图生成器检查此示例:这对我不起作用,它只是按字面意思显示
{$var1}
。晚会迟到了,但如果{}
按字面意思显示字符串,可能是因为您没有将文件命名为刀片文件,例如,file.blade.php
。如果您创建一个类似于file.php
的文件名,通常会发生这种情况,因为没有显示刀片语法。现在就加上这个,以防对其他人有帮助。为什么这是最好的方法呢?对于问题中提到的具体案例,我找不到最好的方法?@shaedrich根据我的经验,我认为这是最好的方法。如果你有其他的解决方案,为什么不发布你自己的答案而不是批评?建议你解释你的答案,尤其是如果你确信你的答案更好的话。
{{ $var1 }}
<?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}}