【问题标题】:How put data in app.blade.php from controller in Laravel 5如何从 Laravel 5 的控制器中将数据放入 app.blade.php
【发布时间】:2015-03-07 14:16:28
【问题描述】:

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

【问题讨论】:

  • 在 Laravel 文档中阅读这两秒钟:laravel.com/docs/5.0/controllerslaravel.com/docs/5.0/views
  • 我的意思是加载 app.blade.php 的控制器。因为我需要将一些数据放入标题中。
  • 它没有被任何控制器加载。它由您渲染的视图扩展。您可以在那里或更好地传递数据,使用view composer
  • 你能告诉我我应该怎么做吗?我需要添加将返回变量的函数。

标签: laravel controller


【解决方案1】:

要将数据注入布局视图(由其他人@extended 的视图),您可以使用视图编辑器。你的做法其实还不错explained in the documentation

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

<?php namespace App\Providers;

use View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider {

    public function boot()
    {
        //
    }


    public function register()
    {
        //
    }
}

现在在boot() 方法中注册你的视图作曲家:

View::composer('app', function($view){
    $view->with('foo', 'bar');
});

之后,不要忘记在config/app.php 中注册服务提供者,方法是将其添加到providers 数组中:

'providers' => [
    // other providers
    'App\Providers\ComposerServiceProvider'
]

【讨论】:

  • 为什么这对我有用?我使用的是 laravel 5.6,我添加了ComposerServiceProvider,当我尝试打开视图时它给了我no such variable foo。我需要刷新设置吗?
【解决方案2】:

感谢 lukasgeiter 的回答。但它需要一些修改才能使其与 Laravel 呈现的所有视图一起工作。

您需要将 '*' 字符作为通配符,因此您可以将作曲家附加到所有视图

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

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()
    {
        //
    }
}

同时在config\app.php文件中注册服务提供者为,

'providers' => [
    // Other Service Providers...
    App\Providers\ComposerServiceProvider::class,
],

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

<div>
   {{$foo}}
</div>

这将呈现给客户端

<div>
   bar
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2018-03-02
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多