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