我使用Laravel构建CMS,并且我有一个可在我的主布局文件中找到的“查看网站”按钮(如果这就是你如何调用它)app.blade.php
。这个文件是我产生我的内容并加载我所有的css和js文件的地方。
我希望View Site按钮的链接是动态的,基于我的设置表中设置的基本URL。我可以像这样检索变量:
$settings = DB::table('settings')->get();
return $settings->base_url;
但我的问题是:如何在我的视图中检索正确方式?
我在执行此操作时遇到了问题,因为我通常会使用routes.php
文件将方法链接到特定页面,但由于app.blade.php
随处可用,我无法做到这(我猜)。
答案 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