symplify/symfony-static-dumper

该包已被废弃且不再维护。作者建议使用静态网站服务包。

将 Symfony 应用导出为静态网站

安装数量: 60,250

依赖者: 0

建议者: 0

安全性: 0

星标: 55

关注者: 4

分支: 2

类型:symfony-bundle

11.1.26 2023-02-02 05:04 UTC

This package is auto-updated.

Last update: 2023-02-18 15:21:49 UTC


README

Downloads total

将您的 Symfony 应用导出为仅包含 HTML + CSS + JS 的静态网站。适用于部署到 GitHub Pages 和其他非 PHP 静态网站托管。

安装

composer require symplify/symfony-static-dumper

将配置添加到 config/config.php

use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\SymfonyStaticDumper\ValueObject\SymfonyStaticDumperConfig;

return static function (ContainerConfigurator $containerConfigurator): void {
    $containerConfigurator->import(SymfonyStaticDumperConfig::FILE_PATH);
};

带有参数的控制器

为了使带有参数的控制器(例如:/blog/{slug})能够静态导出,您必须实现 Symplify\SymfonyStaticDumper\Contract\ControllerWithDataProviderInterface 并实现 3 个方法

  • getControllerClass()
  • getControllerMethod()
  • getArguments()

例如,以下提供者

namespace TomasVotruba\SymfonyStaticDump\ControllerWithDataProvider;

use Symplify\SymfonyStaticDumper\Contract\ControllerWithDataProviderInterface;
use TomasVotruba\Blog\Controller\PostController;
use TomasVotruba\Blog\Repository\PostRepository;

final class PostControllerWithDataProvider implements ControllerWithDataProviderInterface
{
    private PostRepository $postRepository;

    public function __construct(PostRepository $postRepository)
    {
        $this->postRepository = $postRepository;
    }

    public function getControllerClass(): string
    {
        return PostController::class;
    }

    public function getControllerMethod(): string
    {
        return '__invoke';
    }

    /**
     * @return string[]
     */
    public function getArguments(): array
    {
        $slugs = [];

        foreach ($this->postRepository->getPosts() as $post) {
            $slugs[] = $post->getSlug();
        }

        return $slugs;
    }
}

以下控制器

namespace TomasVotruba\Blog\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use TomasVotruba\Blog\Repository\PostRepository;
use TomasVotruba\Blog\ValueObject\Post;

final class PostController extends AbstractController
{
    private PostRepository $postRepository;

    public function __construct(PostRepository $postRepository)
    {
        $this->postRepository = $postRepository;
    }

    /**
     * @Route(path="/blog/{slug}", name="post_detail", requirements={"slug"="\d+\/\d+.+"})
     */
    public function __invoke(string $slug): Response
    {
        $post = $this->postRepository->getBySlug($slug);

        return $this->render('blog/post.twig', [
            'post' => $post,
            'title' => $post->getTitle(),
        ]);
    }
}

使用

vendor/bin/console dump-static-site

网站将生成到您项目根目录下的 /output 目录。

您想自己修改 /public 目录吗?

vendor/bin/console dump-static-site --public-directory another-public --output-directory custom-output

要查看网站,只需运行本地服务器

php -S localhost:8001 -t output

然后在浏览器中打开 localhost:8001


报告问题

如果您遇到错误或想请求新功能,请访问 Symplify monorepo 问题跟踪器

贡献

此包的源代码包含在 Symplify monorepo 中。我们欢迎在 symplify/symplify 上为此包做出贡献。