[Symfony6 系列] 常见包及安装

包安装方法

Packagist

Packagist 是默认的 Composer 包存储库,它聚合了可使用 Composer 安装的公共 PHP 包。您可以使用 Composer 来管理项目或库的依赖项 – 在Composer 网站上阅读有关它的更多信息。

安装包命令

cd project
composer require logger -v;

Symfony Flex

Symfony Flex 是一个简化 Symfony 应用程序安装/删除软件包的工具。

从技术上讲,Symfony Flex 是一个 Composer 插件,它可以自动完成 Symfony 应用程序中最常见的命令。

Symfony Flex 预定义了配置表仓库(recipes)在安装包时优先从仓库中查找和安装,配置表中的安装包记录了所有需要安装的相关库和对应的版本号。

Symfony Flex 配置表由社区贡献,共两个公共仓库:

  • 主配方存储库,是一个高质量和在维护的配置表。默认情况下只在这个存储库中查找。
  • Contrib 配方存储库,包含由社区创建的所有配置表。它们都保证能够正常工作,但是它们相关的包可能无法维护。

Symfony Packs 包

有时需要安装多个包和捆绑包。Symfony 提供的包是包含多个依赖项的 Composer 元包。

例如,若要在应用程序中添加调试功能,可以运行该命令:

composer require --dev debug

这样就安装了 symfony/debug-pack,它又安装了几个包,比如 symfony/debug-bundle、 symfony/monolog-bundle、 symfony/var-dump 等。解决包安装的依赖关系。

常见包列表

Annotation Routes 注释路由

在控制器中使用注释属性路由。从 PHP 8 开始,属性内置在 PHP 中。

composer require annotations
#或,实际包名为require annotationssensio/framework-extra-bundle,别名annotations
composer require annotationssensio/framework-extra-bundle

代码:

use Symfony\Component\Routing\Annotation\Route;

class LuckyController
{
    #[Route('/lucky/number')]
    public function number(): Response
    {
        // 代码....
    }
}

验证路由

php bin/console debug:router

twig 模板

PHP 模板引擎,实现从控制器返回 HTML 渲染到浏览器。Twig 有灵活、快速、安全的特点。

composer require twig

代码:

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
//必须继承框架的抽象控制器类
class LuckyController extends AbstractController
{
    #[Route('/lucky/number')]
    public function number(): Response
    {
        $number = random_int(0, 100);
				//模板文件lucky/number.html.twig
        return $this->render('lucky/number.html.twig', [
            'number' => $number,
        ]);
    }
}

模板文件语法参考文档:Creating and Using Templates (Symfony 6.0 Docs)

HTTP Client (HTTP 客户端)

是一个低级别的 HTTP 客户端,同时支持 PHP 流包装器和 cURL。它提供了使用 API 的实用程序,并支持同步和异步操作。

composer require symfony/http-client

代码:

$response = $this->client->request(
  'GET',
  'https://api.github.com/repos/symfony/symfony-docs'
);

$statusCode = $response->getStatusCode();
// $statusCode = 200
$contentType = $response->getHeaders()['content-type'][0];
// $contentType = 'application/json'
$content = $response->getContent();
// $content = '{"id":521583, "name":"symfony-docs", ...}'
$content = $response->toArray();
// $content = ['id' => 521583, 'name' => 'symfony-docs', ...]

Filesystem 文件系统

操作文件和目录

composer require symfony/filesystem

代码:

use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Path;

$filesystem = new Filesystem();

try {
    $filesystem->mkdir(
        Path::normalize(sys_get_temp_dir().'/'.random_int(0, 1000)),
    );
} catch (IOExceptionInterface $exception) {
    echo "An error occurred while creating your directory at ".$exception->getPath();
}

Translations 多语言/国际化

composer require symfony/translation

参考配置:翻译(Symfony 6.0 文档)

发表评论