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

The best way to return a variable in my app.blade.php Laravel

我正在使用 Laravel 构建 CMS,并且我有一个在我的主布局文件中可用的“查看站点”按钮(如果您这样称呼它的话)app.blade.php。该文件是我生成内容并加载所有 css 和 js 文件的地方。

我希望“查看站点”按钮的 link 是动态的,基于我的设置 table 中设置的基础 url。我可以像这样检索变量:

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

return $settings->base_url;

但我的问题是:我如何以 正确 的方式检索它?

我在执行此操作时遇到问题,因为通常我 link 使用 routes.php 文件到特定页面的方法,但由于 app.blade.php 在任何地方都可用,我无法这样做(我猜)。

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

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

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

现在在您的 blade 模板 app.blade.php 中,您可以像这样获取它:

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

您需要将此 helper.php 文件添加到作曲家自动加载。

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

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

将此添加到 autoload 部分。

现在做一个composer dump-autoload

您需要 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 中。当然,您可以将它移出到它自己的 class 中,而不是将视图组合器添加为闭包,而该 class 只是包含在服务提供者中,但这应该会给您正确的想法。

然后确保在 config/app.php:

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

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