ongr / router-bundle
ONGR 路由的包。
Requires
- php: >=5.6
- ongr/elasticsearch-bundle: ^5.0.0
- symfony-cmf/routing: ^1.4.0
- symfony/symfony: ~2.8|~3.0
Requires (Dev)
- phpunit/phpunit: ~5.5
- satooshi/php-coveralls: ~1.0
- squizlabs/php_codesniffer: ~2.0
- symfony/monolog-bundle: ~2.3|~3.0
README
Router Bundle 允许定义和匹配 Elasticsearch 文档的 URL。在 URL 匹配阶段,它还会搜索具有指定 URL 的 Elasticsearch 文档。
这可以用于为任何文档生成/匹配友好的 URL。美丽的 URL 有助于 SEO 并提高用户体验。
如果您有任何问题,请随时在 聊天室提问,或者直接过来打个招呼 ;)。
文档
该包的在线文档在这里 这里
有关贡献规则,请查看 contribute 主题。
设置包
此包强烈使用 ONGR Elasticsearch Bundle。我们假设您熟悉它,并且它已经满足您的需求。
步骤 1: 安装 Router 包
Router 包使用 Composer 安装。
composer require ongr/router-bundle "~1.0"
在您的 AppKernel 中启用 Router 和 Elasticsearch 包
// app/AppKernel.php public function registerBundles() { $bundles = [ // ... new ONGR\ElasticsearchBundle\ONGRElasticsearchBundle(), new ONGR\RouterBundle\ONGRRouterBundle(), ]; }
就这样,1 步 安装。接下来的所有步骤都是如何设置产品文档和 SEO URL 的演示。所以请看下面的示例,看看它是多么简单,然后根据您的需求进行调整。
步骤 2: 添加配置
添加 Router 和 Elasticsearch 包的最小配置。
# app/config/config.yml ongr_elasticsearch: analysis: analyzer: urlAnalyzer: type: custom tokenizer: keyword filter: [lowercase] connections: default: index_name: acme managers: default: connection: default mappings: - AppBundle ongr_router: #disable_alias: true # defaults to false #router_priority: 1000 # defaults to -100 manager: es.manager.default seo_routes: 'AppBundle:Product': AppBundle:Product:document # ...
警告:如果使用 SeoAwareTrait,您必须实现
urlAnalyzer
分析器,否则在创建索引时将出现致命错误。
在包的配置中,您需要指定要使用的 es.manager
,并在 seo_routes
下指定将作为密钥的文档和作为值处理请求的控制器的操作。
urlAnalyzer
在 ongr_elasticsearch
配置中定义了 Elasticsearch 如何分析所有 URL 字段。
如果您使用另一个也具有别名 Symfony 路由器的第三方包,您可以将 disable_alias
设置为 true
。这可以防止可能的冲突。
router_priority
参数定义了将 ONGR
动态路由器设置到链式路由器的优先级。默认为 -100,以便在标准 Symfony 路由器之后调用,但此值可以根据您的项目需求进行更改。
有关配置的更多信息,请参阅 Elasticsearch 包映射文档。
使用示例
步骤 1: 创建产品文档
让我们创建一个 Product
文档类。我们假设已经安装了 AppBundle。
// src/AppBundle/Document/Product.php namespace AppBundle\Document; use ONGR\ElasticsearchBundle\Annotation as ES; use ONGR\RouterBundle\Document\SeoAwareTrait; use ONGR\RouterBundle\Document\SeoAwareInterface; /** * @ES\Document() */ class Product implements SeoAwareInterface { use SeoAwareTrait; // <- Trait for URL's /** * @ES\Property(type="keyword") */ public $title; // ... }
为了支持友好 URL,该包提供了一个具有预定义映射的 SeoAwareTrait
。
步骤 2: 创建产品页面的控制器和操作
// src/AppBundle/Controller/ProductController.php namespace AppBundle\Controller; use AppBundle\Document\Product; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Response; class ProductController extends Controller { public function documentAction(Product $document) { return new Response("Product: " . $document->title); } }
步骤 3: 创建索引并插入演示产品
通过在您的终端运行以下命令创建 Elasticsearch 索引
app/console ongr:es:index:create
有关所有命令的更多信息,请参阅 Elasticsearch 包命令章节。
此外,在您的终端中运行以下curl命令以插入用于此演示的产品。
curl -XPOST 'http://localhost:9200/acme/product?pretty=1' -d '{"title":"Acoustic Guitar", "url":"/music/electric-guitar"}'
步骤 4:检查是否成功
只需访问 /music/electric-guitar
页面,您应该会看到您在 步骤 3 中插入的产品标题。
许可证
此捆绑包遵循 MIT 许可证。请参阅捆绑包中的完整许可证,详情请见 LICENSE
文件。