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}}