在我的app.blade.php Laravel中返回变量的最佳方法

时间:2016-03-22 17:12:46

标签: php laravel laravel-5 blade

我使用Laravel构建CMS,并且我有一个可在我的主布局文件中找到的“查看网站”按钮(如果这就是你如何调用它)app.blade.php。这个文件是我产生我的内容并加载我所有的css和js文件的地方。

我希望View Site按钮的链接是动态的,基于我的设置表中设置的基本URL。我可以像这样检索变量:

$settings = DB::table('settings')->get();

return $settings->base_url;

但我的问题是:如何在我的视图中检索正确方式?

我在执行此操作时遇到了问题,因为我通常会使用routes.php文件将方法链接到特定页面,但由于app.blade.php随处可用,我无法做到这(我猜)。

2 个答案:

答案 0 :(得分:3)

您需要view composer。这是一个可以在每次渲染时向视图添加数据的函数。将视图编辑器放在服务提供者中是最有意义的。

app/Providers中创建新的服务提供商,然后在boot()方法中添加您的视图编辑器。

ViewComposerServiceProvider

namespace App\Providers;

use DB;
use Illuminate\Support\ServiceProvider;

class ViewComposerServiceProvider extends ServiceProvider
{
    public function boot()
    {
        view()->composer('app', function($view) {
            $settings = DB::table('settings')->get();
            $view->with('base_url', $settings->base_url);
        });
    }
}

每次渲染时,这会将一个名为$base_url的变量注入app.blade.php。当然,不是将视图编辑器添加为闭包,而是可以将其移动到自己的类中,该类只包含在服务提供者中,但这应该给你正确的想法。

然后确保在config/app.php

中注册您的服务提供商
providers => [
    //All other service providers
    App\Providers\ViewComposerServiceProvider::class,
]

这是Laravel的首选方式"每次渲染时将数据注入视图。这是最灵活和可扩展的方式,因为它允许您在呈现视图之前以任何方式修改视图。 Laracasts在这个主题上有一个非常好的free video

答案 1 :(得分:0)

最好的方法是创建一个辅助函数并在视图模板中使用它。

app文件夹中,创建一个文件:helper.php

function getBaseURL()
{
  return \App\Setting::get()->base_url ;
}

现在,在您的刀片模板app.blade.php中,您可以获得它:

<a href="{{ getBaseURL() }}"> Visit Site</a>

您需要将此helper.php文件添加到composer autoload。

为此,在你的compose.json文件中,

    "files":[
        "app/helper.php"
    ],

autoload部分添加此内容。

现在进行composer dump-autoload