This commit is contained in:
2022-12-24 22:10:40 +08:00
parent 84fc1030a7
commit 2a00928da5
4898 changed files with 429855 additions and 77 deletions
@@ -0,0 +1,58 @@
<?php
/*
* This file is part of Respect/Validation.
*
* (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
*
* For the full copyright and license information, please view the LICENSE file
* that was distributed with this source code.
*/
declare(strict_types=1);
namespace Respect\Validation\Message;
use function call_user_func;
use function preg_replace_callback;
use function Respect\Stringifier\stringify;
final class Formatter
{
/**
* @var callable
*/
private $translator;
/**
* @var ParameterStringifier
*/
private $parameterStringifier;
public function __construct(callable $translator, ParameterStringifier $parameterStringifier)
{
$this->translator = $translator;
$this->parameterStringifier = $parameterStringifier;
}
/**
* @param mixed $input
* @param mixed[] $parameters
*/
public function format(string $template, $input, array $parameters): string
{
$parameters['name'] = $parameters['name'] ?? stringify($input);
return preg_replace_callback(
'/{{(\w+)}}/',
function ($match) use ($parameters) {
if (!isset($parameters[$match[1]])) {
return $match[0];
}
return $this->parameterStringifier->stringify($match[1], $parameters[$match[1]]);
},
call_user_func($this->translator, $template)
);
}
}
@@ -0,0 +1,22 @@
<?php
/*
* This file is part of Respect/Validation.
*
* (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
*
* For the full copyright and license information, please view the LICENSE file
* that was distributed with this source code.
*/
declare(strict_types=1);
namespace Respect\Validation\Message;
interface ParameterStringifier
{
/**
* @param mixed $value
*/
public function stringify(string $name, $value): string;
}
@@ -0,0 +1,34 @@
<?php
/*
* This file is part of Respect/Validation.
*
* (c) Alexandre Gomes Gaigalas <alexandre@gaigalas.net>
*
* For the full copyright and license information, please view the LICENSE file
* that was distributed with this source code.
*/
declare(strict_types=1);
namespace Respect\Validation\Message\Stringifier;
use Respect\Validation\Message\ParameterStringifier;
use function is_string;
use function Respect\Stringifier\stringify;
final class KeepOriginalStringName implements ParameterStringifier
{
/**
* {@inheritDoc}
*/
public function stringify(string $name, $value): string
{
if ($name === 'name' && is_string($value)) {
return $value;
}
return stringify($value);
}
}