我正在使用 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/