如何将数据放在laravel 5中的控制器的app.blade.php中

Jen*_*sej 4 controller laravel

我需要将一些动态数据从控制器放到app.blade.php,但我找不到任何控制器.我在哪里这样做?谢谢

luk*_*ter 7

要将数据注入布局视图(@extend由其他人编辑的视图),您可以使用视图编辑器.你如何做到这一点实际上在文档中很好地解释

创建服务提供者(内部app/Providers):

<?php namespace App\Providers;

use View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider {

    public function boot()
    {
        //
    }


    public function register()
    {
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在boot()方法内注册视图编辑器:

View::composer('app', function($view){
    $view->with('foo', 'bar');
});
Run Code Online (Sandbox Code Playgroud)

之后,不要忘记通过将服务提供商config/app.php添加到providers数组来注册服务提供商:

'providers' => [
    // other providers
    'App\Providers\ComposerServiceProvider'
]
Run Code Online (Sandbox Code Playgroud)

  • 为什么这对我有用?我在使用 laravel 5.6 并添加了“ComposerServiceProvider”,当我尝试打开视图时,它给了我“没有这样的变量 foo”。我需要刷新设置还是什么? (2认同)

mil*_*ili 5

感谢 lukasgeiter 的回答。但是它需要一些修改才能让它与 Laravel 渲染的所有视图一起工作。

您需要将 '*' 字符作为通配符,这样您就可以为所有视图附加一个作曲家

View::composer('*', function($view){
    //any code to set $val variable
    $val = 'bar';
    $view->with('foo', $val);
});
Run Code Online (Sandbox Code Playgroud)

所以完整的类app\Providers\ComposerServiceProvider.php会像,

<?php 
namespace App\Providers;
use View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider {

    public function boot()
    {
        View::composer('*', function($view){
            //any code to set $val variable
            $val = 'bar';
            $view->with('foo', $val);
        });
    }

    public function register()
    {
        //
    }
}
Run Code Online (Sandbox Code Playgroud)

还将config\app.php文件中的服务提供商注册为,

'providers' => [
    // Other Service Providers...
    App\Providers\ComposerServiceProvider::class,
],
Run Code Online (Sandbox Code Playgroud)

现在您可以$fooresources\views\layouts\app.blade.php文件中使用变量作为

<div>
   {{$foo}}
</div>
Run Code Online (Sandbox Code Playgroud)

这将呈现给客户端

<div>
   bar
</div>
Run Code Online (Sandbox Code Playgroud)