mirror of
https://github.com/Respect/Validation.git
synced 2026-03-15 06:45:44 +01:00
Similar to d8e31db (commit that containerized iso code dbs), but
this time for PhoneNumberUtil.
This makes the optional dependency testable.
PhoneNumberUtil doesn't have a public constructor, so a factory
was declared instead.
124 lines
5.4 KiB
PHP
124 lines
5.4 KiB
PHP
<?php
|
|
|
|
/*
|
|
* SPDX-License-Identifier: MIT
|
|
* SPDX-FileCopyrightText: (c) Respect Project Contributors
|
|
* SPDX-FileContributor: Henrique Moody <henriquemoody@gmail.com>
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Respect\Validation;
|
|
|
|
use DI\Container;
|
|
use libphonenumber\PhoneNumberUtil;
|
|
use Psr\Container\ContainerInterface;
|
|
use Respect\StringFormatter\BypassTranslator;
|
|
use Respect\StringFormatter\Modifier;
|
|
use Respect\StringFormatter\Modifiers\ListModifier;
|
|
use Respect\StringFormatter\Modifiers\QuoteModifier;
|
|
use Respect\StringFormatter\Modifiers\RawModifier;
|
|
use Respect\StringFormatter\Modifiers\StringifyModifier;
|
|
use Respect\StringFormatter\Modifiers\TransModifier;
|
|
use Respect\StringFormatter\PlaceholderFormatter;
|
|
use Respect\Stringifier\DumpStringifier;
|
|
use Respect\Stringifier\Handler;
|
|
use Respect\Stringifier\Handlers\CompositeHandler;
|
|
use Respect\Stringifier\HandlerStringifier;
|
|
use Respect\Stringifier\Quoter;
|
|
use Respect\Stringifier\Quoters\CodeQuoter;
|
|
use Respect\Stringifier\Stringifier;
|
|
use Respect\Validation\Message\Formatter\FirstResultStringFormatter;
|
|
use Respect\Validation\Message\Formatter\NestedArrayFormatter;
|
|
use Respect\Validation\Message\Formatter\NestedListStringFormatter;
|
|
use Respect\Validation\Message\Formatter\TemplateResolver;
|
|
use Respect\Validation\Message\InterpolationRenderer;
|
|
use Respect\Validation\Message\Parameters\NameHandler;
|
|
use Respect\Validation\Message\Parameters\PathHandler;
|
|
use Respect\Validation\Message\Parameters\ResultHandler;
|
|
use Respect\Validation\Message\Renderer;
|
|
use Respect\Validation\Transformers\Prefix;
|
|
use Respect\Validation\Transformers\Transformer;
|
|
use Symfony\Contracts\Translation\TranslatorInterface;
|
|
|
|
use function DI\autowire;
|
|
use function DI\create;
|
|
use function DI\factory;
|
|
|
|
final class ContainerRegistry
|
|
{
|
|
private static ContainerInterface|null $container = null;
|
|
|
|
/** @param array<string, mixed> $definitions */
|
|
public static function createContainer(array $definitions = []): Container
|
|
{
|
|
return new Container($definitions + [
|
|
PhoneNumberUtil::class => factory(static fn() => PhoneNumberUtil::getInstance()),
|
|
Transformer::class => create(Prefix::class),
|
|
TemplateResolver::class => create(TemplateResolver::class),
|
|
TranslatorInterface::class => autowire(BypassTranslator::class),
|
|
Renderer::class => autowire(InterpolationRenderer::class),
|
|
ResultFilter::class => create(OnlyFailedChildrenResultFilter::class),
|
|
'respect.validation.formatter.message' => autowire(FirstResultStringFormatter::class),
|
|
'respect.validation.formatter.full_message' => autowire(NestedListStringFormatter::class),
|
|
'respect.validation.formatter.messages' => autowire(NestedArrayFormatter::class),
|
|
'respect.validation.ignored_backtrace_paths' => [__DIR__ . '/ValidatorBuilder.php'],
|
|
'respect.validation.rule_factory.namespaces' => ['Respect\\Validation\\Validators'],
|
|
ValidatorFactory::class => factory(static fn(Container $container) => new NamespacedValidatorFactory(
|
|
$container->get(Transformer::class),
|
|
$container->get('respect.validation.rule_factory.namespaces'),
|
|
)),
|
|
Quoter::class => create(CodeQuoter::class)->constructor(120),
|
|
Handler::class => factory(static function (Container $container) {
|
|
$handler = CompositeHandler::create();
|
|
$handler->prependHandler(new PathHandler($container->get(Quoter::class)));
|
|
$handler->prependHandler(new NameHandler());
|
|
$handler->prependHandler(new ResultHandler($handler));
|
|
|
|
return $handler;
|
|
}),
|
|
PlaceholderFormatter::class => factory(static fn(Container $container) => new PlaceholderFormatter(
|
|
[],
|
|
$container->get(Modifier::class),
|
|
)),
|
|
Stringifier::class => factory(static fn(Container $container) => new HandlerStringifier(
|
|
$container->get(Handler::class),
|
|
new DumpStringifier(),
|
|
)),
|
|
Modifier::class => factory(static fn(Container $container) => new TransModifier(
|
|
new ListModifier(
|
|
new QuoteModifier(
|
|
new RawModifier(
|
|
new StringifyModifier($container->get(Stringifier::class)),
|
|
),
|
|
),
|
|
$container->get(TranslatorInterface::class),
|
|
),
|
|
$container->get(TranslatorInterface::class),
|
|
)),
|
|
ValidatorBuilder::class => factory(static fn(Container $container) => new ValidatorBuilder(
|
|
$container->get(ValidatorFactory::class),
|
|
$container->get(Renderer::class),
|
|
$container->get('respect.validation.formatter.message'),
|
|
$container->get('respect.validation.formatter.full_message'),
|
|
$container->get('respect.validation.formatter.messages'),
|
|
$container->get(ResultFilter::class),
|
|
$container->get('respect.validation.ignored_backtrace_paths'),
|
|
)),
|
|
]);
|
|
}
|
|
|
|
public static function getContainer(): ContainerInterface
|
|
{
|
|
if (!isset(self::$container)) {
|
|
self::$container = self::createContainer();
|
|
}
|
|
|
|
return self::$container;
|
|
}
|
|
|
|
public static function setContainer(ContainerInterface $instance): void
|
|
{
|
|
self::$container = $instance;
|
|
}
|
|
}
|