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

标签 php laravel laravel-5 laravel-blade

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

我希望“查看站点”按钮的链接是动态的,基于我的设置表中设置的基本 URL。我可以像这样检索变量:

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

return $settings->base_url;

但我的问题是:如何以正确方式在我的 View 中检索此内容?

我在执行此操作时遇到困难,因为通常我使用 routes.php 文件将方法链接到特定页面,但由于 app.blade.php 是我无法做到这一点(我猜)。

最佳答案

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

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

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 的变量注入(inject)到 app.blade.php 中。当然,您可以将 View 编辑器移出到它自己的类中,该类刚刚包含在服务提供程序中,而不是将 View 编辑器添加为闭包,但这应该给您正确的想法。

然后确保在 config/app.php 中注册您的服务提供商:

providers => [
    //All other service providers
    App\Providers\ViewComposerServiceProvider::class,
]

这是每次渲染 View 时将数据注入(inject) View 的首选“Laravel 方式”。这是最灵活和可扩展的方式,因为它允许您在渲染 View 之前以任何方式修改 View 。 Laracasts 有一个非常好的 free video就主题而言。

关于php - 在我的 app.blade.php Laravel 中返​​回变量的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36160956/

相关文章:

javascript - 金融应用程序的外汇汇率

angularjs - 意外访问 Access-Control-Allow-Origin header 错误

laravel - 使用 Laravel 的 Elixir (Gulp) 编译 Zurb Foundation 6

php - Laravel - 无法使用软删除取消删除和显示数据

php - 如何在 Laravel 5.4 中验证文件名

php - 隐藏和显示自定义标记在我的谷歌地图中不起作用

php - 使用正则表达式在其之间和之后插入

php - 在哪里放置 include/require 语句?

PHP 将变量附加到字符串的末尾

php - laravel 5 中的 Multi-Tenancy 应用程序?