limenius/filesystem-router-bundle

Symfony 静态页面路由器

dev-master 2020-06-24 12:46 UTC

This package is auto-updated.

Last update: 2024-08-24 22:11:30 UTC


README

此包提供了一个 Symfony 链式路由器,它为目录中的静态文件添加路由。

使用场景:您可能想集成静态内容生成引擎(Sphinx、Jekyll 等)的产品,或者您只是目录中有些 HTML 文件,并希望它们成为您的 Symfony 应用程序中的路由,因为您想,例如...

  • 将大量静态 HTML 文档嵌入到 Twig 模板中,带有菜单、侧边栏。
  • 为它们生成路由。
  • 预处理它们,例如提取标题。
  • ...

使用方法

安装

打开命令控制台,进入您的项目目录,并执行以下命令以下载此包的最新稳定版本:

$ composer require limenius/filesystem-router-bundle

配置

此包使用 Symfony CMF 动态路由器,因此我们需要在 app/config.yml 文件中对其进行配置

cmf_routing:
    chain:
        routers_by_id:
            router.default: 200
            cmf_routing.dynamic_router: 100
    dynamic:
        route_provider_service_id: limenius_filesystem_router.route_provider
        templates_by_class:
            Limenius\Bundle\FilesystemRouterBundle\Document\ContentDocument: MyBundle:MyController:my_template.html.twig

在最后一行,我们指定了处理静态内容的模板。

此外,我们还添加了一些行来配置此包

limenius_filesystem_router:
    collections:
        Docs:
            path: "%kernel.root_dir%/Resources/my_static_directory/"
            prefix: doc

collections 是您想要路由的目录列表。每个集合都有一个必需的 path 和一个可选的 prefix。此包将在路径中递归地找到每个 html 文件,并为它们创建路由。

我们指定的模板将有一个 contentDocument 可用

{{ contentDocument |raw }}    

自定义控制器

我们可以通过配置动态路由器来指定将接收文档的控制器

cmf_routing:
    chain:
        routers_by_id:
            router.default: 200
            cmf_routing.dynamic_router: 100
    dynamic:
        route_provider_service_id: limenius_filesystem_router.route_provider
        controllers_by_type:
            filesystem_route: Acme\MyBundle\Controller\MyController::myAction

在最后一行,我们指定了处理静态内容的操作。

该操作将在变量 $contentDocument 中接收文件的全部内容。

它可以非常简单,例如

/**
 * @Template()
 */
public function docsAction($contentDocument)
{
    return array('content' => $contentDocument);
}

带有包含以下内容的模板

{{ content | raw }}    

当然,您可以对处理 $contentDocument 的文档进行预处理,例如爬取以提取标题或其他信息。

使用 app/console router:debug 命令检查您的新路由。

路由生成

使用文件的路径,如 <a href="{{ url('manual/index.html')}}">文档</a>

公开文件

默认情况下,此包将仅公开扩展名为 html 的文件。您可以通过 extensions_exposed 选项进行配置。

limenius_filesystem_router:
    collections:
        Docs:
            path: "%kernel.root_dir%/Resources/my_docs/_build/html"
            prefix: docs
            extensions_exposed: ['html', 'txt']

许可证

此包受 MIT 许可证的约束。请参阅文件中的完整许可证。

LICENSE.md