应用程序和框架集成¶
该库与框架无关,但在依赖框架的应用程序中使用它仍然是可能的。
Symfony 包¶
可以使用捆绑包自动将此库集成到 Symfony 应用程序中。
该捆绑包的文档可以在 GitHub 存储库中找到。
Mezzio 集成¶
与 Laminas 的 Mezzio 框架的正式集成允许使用该库非常轻松地将 HTTP 请求映射到域对象。
该包的文档可以在 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 请求映射到控制器操作参数。集成应该将其连接到框架的路由层,以便自动解析控制器参数。
一般的做法是:
- 从框架的本机请求对象构建
HttpRequest, - 使用参数映射器来解析控制器的参数,
- 使用已解析的参数调用控制器。
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()来完成。
其他配置¶
关于其他配置,例如灵活模式、配置支持的日期格式或注册自定义构造函数,应该提供集成来以方便的方式配置映射器/规范化器构建器 - 它的完成方式主要取决于框架功能及其主要理念。