bankiru / seo-engine
此包已被弃用,不再维护。未建议替代包。
Banki.ru SEO 引擎库
0.2
2017-03-30 12:00 UTC
Requires
- php: ~5.5 || ~7.0
- doctrine/collections: ~1.1
- doctrine/common: ~2.4
Requires (Dev)
- phpunit/phpunit: ~4.8 || ~5.0
- symfony/browser-kit: ~2.8 || ~3.0
- symfony/config: ~2.7 || ~3.0
- symfony/dependency-injection: ~2.7 || ~3.0
- symfony/framework-bundle: ~2.8 || ~3.0
- symfony/http-kernel: ~2.7 || ~3.0
- symfony/options-resolver: ~2.7 || ~3.0
- symfony/routing: ~2.7 || ~3.0
- symfony/twig-bundle: ~2.7 || ~3.0
- twig/twig: ~1.20
Suggests
- symfony/symfony: To use as a bundle
- twig/twig: To render links twig templates
This package is not auto-updated.
Last update: 2022-11-08 05:11:32 UTC
README
Banki.ru SEO 引擎
通用 SEO 库,适用于独立使用(包含 Symfony DI)
用途
- 处理通用 SEO 数据
- SEO 链接生成
- 生成站点地图
安装
composer require bankiru/seo-engine:~1.0
术语
匹配
- 目标 — 是一个路由标识符和一组按占位符代码索引的实体
- 完整 目标空间 — 是给定路由标识符的所有可能的目标的集合
- 条件 — 是一个二元谓词,在成功匹配时可以返回 目标 重量
- 目标空间定义 — 是完整 目标空间 的一个(子)集,由一组 条件 定义
生成
- 源 — 是任何可计数的可迭代实体源,可以使用 条件 进行过滤
- 填充器 — (通常)是一个函数,将缺失值推断到 目标
使用方法
独立
对于通用独立使用,您必须实现(或使用现成的静态集合实现)三个服务
- 目标 - SEO 引擎要匹配的项目
- TargetDefinitionRepositoryInterface - 根据 目标空间 索引的路由来源
- PageRepositoryInterface - 通过匹配的 目标空间 和初始 目标 匹配 SeoPageInterface
通用流程
// Instantiate TargetRepository $targetRepository = new StaticTargetRepository(); // Fill it with $targetRepository->add($target); // Instantiate PageRepository $pageRepository = new StaticPageRepository(); // Fill page pairs with $pageRepository->add($target, $page); // Instantiate target sorter $sorter = new MatchScoreTargetSorter($targetRepository); // Instantiate matcher $matcher = new DestinationMatcher($sorter, $pageRepository); // Create the destination to match // The general approach is to hook into request processing and create it // from incoming HTTP request $destination = new Destination( '/blog/articles/123', [ 'page_id' => 123, 'language' => 'en', 'category' => 'programming' ] ); // Obtain matching SEO page for destination. Or handle a matching exception try { $page = $matcher->match($destination); } catch (MatchingException $e) { // you probably also wan't to set proper headers here echo "Not found"; exit(); } // Do whatether you want to render $page as HTML response properly.
Symfony 集成
此库已内置到 symfony 请求处理流程和 DI 中,因此内核为您完成了上述大部分工作
public function someAction(Request $request) { $destination = RequestDestinationFactory::createFromRequest($requset) $matcher = $container->get('bankiru.seo.matcher'); try { $page = $matcher->match($destination); } catch (MatchingException $e) { throw $this->createNotFoundException(); } return ['page'=>$page]; }
如果您为您的路由定义了 options: {seo: true}
,则可以通过以下签名立即获取 SEO 页面
public function someAction(SeoPageInterface $_seo_page) { return ['page'=>$page]; }
这将自动为您抛出异常。
配置
路由
配置路由选项,如下所示
my_route: resources: routes.yml options: seo: true
启用此路由的监听器
集成
本地静态匹配
要启动数据配置,有一个必要的本地接口实现,它允许立即从 init\config 代码中填充存储库并开始使用库。
Doctrine ORM 匹配
您可以在实体仓库之上实现必要的接口。确保实体实现了所需的接口(目标、条件等)
链接生成
为了使用链接生成功能,您必须定义两个
- 使用别名按索引填充源注册表,其中包含
SourceInterface
实体 - 创建链接编译器,该编译器可以使用链接的路线标识符和目的地项作为
Sluggable
来构造 URL
作为 Symfony 集成的一部分,其中包含 SymfonyRouterCompiler
,它使用 UrlGenerator
来编译链接引用
扩展
您可以通过覆盖、装饰和替换以下扩展点来调整您的 SEO 处理体验
匹配
TargetRepositoryInterface
- 为给定路由查找所有匹配的目标TargetSorter
- 从上述所有获取的目标中选择单个目标,通过与目的地匹配来实现PageRepositoryInterface
- 为目标和目的地查找 SEO 页面
生成
DestinationNormalizer
- 将您的实体转换为字符串以生成 slug。SluggableNormalizer
是对象的主要选项,ScalarNormalizer
用于所有标量DestinationCompiler
- 将您的目的地构造到链接中(href、标题和属性)。如果 symfony 可用,则SymfonyRouterCompiler
是主要默认选项SourceInterface
- 创建目的地的数据源。没有默认选项,CollectionSource
是内置的SourceFiller
- 扩展从源生成的值中缺少的目的地条目。不是必需的,因此没有默认值