跳至正文

应用程序和框架集成

该库与框架无关,但在依赖框架的应用程序中使用它仍然是可能的。

Symfony 包

可以使用捆绑包自动将此库集成到 Symfony 应用程序中。

composer require cuyz/valinor-bundle

该捆绑包的文档可以在 GitHub 存储库中找到。

Mezzio 集成

与 Laminas 的 Mezzio 框架的正式集成允许使用该库非常轻松地将 HTTP 请求映射到域对象。

composer require mezzio/mezzio-valinor

该包的文档可以在 https://docs.mezzio.dev/mezzio-valinor/ 找到

自定义集成

如果应用程序没有专用的框架集成,仍然可以手动集成该库。

映射器和规范化器注册

集成最重要的任务是正确注册应用程序中使用的映射器和规范化器。映射器实例应尽可能在服务之间共享;这很重要,因为大量操作会在内部缓存以提高运行时的性能。

如果框架使用服务容器,则应以将映射器和规范化器注册为共享服务的方式对其进行配置。在其他情况下,应避免直接实例化这些服务。

$mapperBuilder = new \CuyZ\Valinor\MapperBuilder();
$normalizerBuilder = new \CuyZ\Valinor\NormalizerBuilder();

// …customization of the mapper builder and normalization builder…

$mapper = $mapperBuilder->mapper();
$jsonNormalizer = $normalizerBuilder->normalizer(\CuyZ\Valinor\Normalizer\Format::json());

$container->addSharedService('mapper', $mapper);
$container->addSharedService('normalizer_json', $jsonNormalizer);

HTTP 请求映射

该库可以使用参数映射器将 HTTP 请求映射到控制器操作参数。集成应该将其连接到框架的路由层,以便自动解析控制器参数。

一般的做法是:

  1. 从框架的本机请求对象构建HttpRequest ,
  2. 使用参数映射器来解析控制器的参数,
  3. 使用已解析的参数调用控制器。
use CuyZ\Valinor\Mapper\Http\HttpRequest;

// In a controller argument resolver / middleware:
$argumentsMapper = $mapperBuilder->argumentsMapper();

// Build an `HttpRequest` from the framework's request and router output.
// If the framework uses PSR-7, the factory method can be used directly:
$request = HttpRequest::fromPsr($psrRequest, $routeParameters);

// Resolve the controller's parameters
$arguments = $argumentsMapper->mapArguments($controller, $request);

// Call the controller
$response = $controller(...$arguments);

注册缓存

如上所述,缓存对于映射器的良好运行非常重要。应用程序确实应该为映射器构建器提供缓存实现。

正如性能章节中所述,该库提供了一个开箱即用的缓存实现,可以在任何应用程序中使用。

$cache = new \CuyZ\Valinor\Cache\FileSystemCache('path/to/cache-directory');

// If the application can detect when it is in development environment, it is
// advised to wrap the cache with a `FileWatchingCache` instance, to avoid
// having to manually clear the cache when a file changes during development.
if ($isApplicationInDevelopmentEnvironment) {
    $cache = new \CuyZ\Valinor\Cache\FileWatchingCache($cache);
}

$mapperBuilder = $mapperBuilder->withCache($cache);
$normalizerBuilder = $normalizerBuilder->withCache($cache);

预热并清除缓存

可以预热缓存以缓解应用程序冷启动。如果框架有办法自动检测映射器将使用哪些类,则应将它们提供给warmupCacheFor方法,如缓存预热章节中所述。

还可以在需要时清除缓存,这可以通过调用MapperBuilder::clearCache()或NormalizerBuilder::clearCache()来完成。

其他配置

关于其他配置,例如灵活模式、配置支持的日期格式或注册自定义构造函数,应该提供集成来以方便的方式配置映射器/规范化器构建器 - 它的完成方式主要取决于框架功能及其主要理念。