我总是使用meta.blade.php 并将我的meta 与主布局分开,不仅是meta,而且还包括styles 和scripts(如果可能),然后包括然后使用@include(...),无论如何,但是如何让它动态?在这种情况下,我使用与您类似的方法,但略有不同,这让我可以充分灵活地使其真正动态化。这就是我的做法,可能它会回答你在这里寻找的东西。所以,让我们创建一个“meta.blade.php”文件,我的文件如下:
<!-- Title-->
<title>@yield('title', smart('site.title'))</title>
<!-- Meta-->
<meta name="keywords" content="@yield('keywords', getSiteMeta('keywords'))" />
<meta name="description" content="@yield('description', getSiteMeta('description'))" />
<meta name="author" content="@yield('author', getSiteMeta('author'))" />
<!-- CSRF for AJAX-->
<meta name="csrf-token" content="{{ csrf_token() }}" />
注意@yield('keywords', getSiteMeta('keywords')) 所以在这里; getSiteMeta 是一个辅助函数,在我的 app\Helpers\Common.php 文件中声明,函数如下所示:
/**
* Prapare meta Tags by $name
*
* @param String $metaname Meta Name
* @return Meta Content
*/
function getSiteMeta($name)
{
return smart("site.meta.$name");
}
这里还涉及到另一个函数,就是:
/**
* Short cut to config call for smart.php file items
* @param String $str Config Key
* @return String Config Value
*/
function smart($str)
{
return config("smart.$str");
}
实际上,我在config\smart.php 有自己的配置文件,smart 是我的站点名称,所以我将所有与站点相关的配置保存在 config\smart.php 中,如下所示:
// config/smart.php
return [
'site' => [
'name' => 'Smart',
'title' => 'Smart Title',
'tagline' => 'Smart Tag Line',
'meta' => [
'keywords' => 'Smart Keywords',
'language' => 'english',
'description' => '...',
'author' => 'Sheikh Heera'
],
],
'role' => [
'default' => 'genaral', # By default, a user gets this role when registers.
'reserved' => 'superuser' # Application's Admin must have this role assigned.
],
// More...
];
您可能明白了,我可以调用smart('key_name') 来获取我网站的配置,因此我不需要使用config('smart.key'),默认情况下所有meta 值都存储在我的config/smart.php 文件中,所以如果我不使用这样的部分:
@section('keywords')
Some, Keywords, Here
@stop
然后我一直使用默认设置,通过使用辅助函数getSiteMeta,我有足够的灵活性来更改函数的逻辑,例如,我可以更改meta 标签的默认源并可以构建它在飞行中。
关于https,这取决于您的网站,如果您使用了安全网址 (ssl/https),Request::url() 只会返回您当前的网址,所以如果它是 https,那么它将返回,否则您会得到http。