critiq / laravel-head-manifest
在Laravel和SPA项目间共享一个清单,定义HTML头部属性,以便爬虫可以访问到路径特定的元数据,而无需在SPA端进行服务器端渲染
This package is not auto-updated.
Last update: 2024-09-26 18:56:07 UTC
README
安装
步骤 1:将Laravel Head Manifest添加到您的laravel项目中
composer require critiq/laravel-head-manifest
步骤 2:将LaravelHeadManifestServiceProvider添加到您的应用程序配置的服务提供者中
在app/config/app.php
'providers' => [
... // Other providers,
App\Providers\RouteServiceProvider::class,
+ Critiq\LaravelHeadManifest\LaravelHeadManifestServiceProvider::class,
步骤 3:创建您的清单文件
在您的public文件夹中,创建head-manifest.json,具有以下基本结构
{
"defaultTitle": "Welcome to Laravel Head Manifest",
"globalMeta": [],
"defaultMeta": [],
"paths": {
"test/1": {
"title": "Test1 Title",
"meta": [
{
"name": "Description",
"property": "description",
"content": "This is a description"
}
]
},
"test/2": {
"title": "Test2 Title",
"meta": []
},
}
}
步骤 4:在您的blade文件中,添加$metadata变量
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
+{!! $metadata !!}
... // Rest of blade template
用法
定义您的路径结构
基本路径结构
在清单的paths值中,您可以定义代表路径及其关联对象的键,该对象包含关联路径的标题和元对象(关于元对象的更多信息稍后提供)。
{
... // Rest of manifest
"paths": {
"/": {
"title": "Home",
"meta": [],
}
}
}
如果您在路径对象中未指定title,它将回退到清单的defaultTitle值。
元数据结构
元数据结构是一个字典,它直接转换为HTML meta标签的属性
例如
... // Rest of manifest "meta": [ { "name": "description", "content": "This is a sample meta description"} ],
将转换为
<meta name="description" content="This is a sample meta description" />
全局元数据
指定根globalMeta元数据对象的列表始终会被添加。如果您需要在每个页面上都有元数据,这将非常有用。
默认元数据
指定根defaultMeta元数据对象的列表只有在请求路径不匹配或路径的meta字段未指定时才会被添加。如果您想从路径中省略默认元数据,请将meta值传递为一个空数组。
路径变量
Laravel Head Manifest支持可变路径。在定义路径键时,使用冒号:前缀路径部分,后跟变量的名称。
示例
{
... // Rest of manifest
"paths": {
"/page/:pageName": {
"title": "You're visiting: :pageName",
}
}
}
如果您导航到/page/cats,这将匹配/page/:pageName路径,并将pageName变量设置为"cats"。您可以在路径对象中的任何字符串中引用此变量。
匹配具有前缀的所有路径
如果您想支持从根路径匹配所有嵌套路径,可以在路径名称后附加一个*。
示例
{
... // Rest of manifest
"paths": {
"/admin/*": {
"title": "Secret admin dashboard",
}
}
}
访问路径,如/admin、/admin/banusers和/admin/purge/everything都将匹配定义的/admin/*路径。
从服务器获取解析的路径数据
Laravel Head Manifest包含一个简单的控制器,可以用来解析路径并返回指定路径的头部数据(无需导航到该路径)。这是以LaravelHeadManifestController的形式。由于Laravel的默认RouteServiceProvider结构,我们建议以下做法
步骤 1:在app/Http/Controllers中创建一个HeadManifestController.php文件,并定义控制器
<?php namespace App\Http\Controllers; use Critiq\LaravelHeadManifest\LaravelHeadManifestController; class HeadManifestController extends LaravelHeadManifestController { }
步骤 2:在您的web.php中创建一个到新控制器的GET路由
Route::get('head-manifest', 'HeadManifestController@index');
注意:根据您的项目结构,这可能不会立即生效。我建议您阅读有关Laravel路由系统的工作原理(特别是RouteServiceProvider中的命名空间)的相关内容。创建自己的HeadManifestController不是必需的,您可以直接路由到LaravelHeadManifestController类。
为什么这个项目?
单页面应用程序(SPA)并不总是与我们的机器人朋友(如Google爬虫、Facebook/Slack/Discord等展开功能,以及许多其他)很好地配合工作。本项目的目标是提供一种优雅的方式来定义您的头部数据,以便在SPA环境中使用,同时不牺牲页面特定元数据的优点。