mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-25 21:34:12 +01:00
- Add Symfony Form Component - Add Symfony CSRF security component - Add iTop default form template - Add Twig debug extension to Twig Environment - Add iTop abstract controller facility to get form builder - Add Twig filter to make trans an alias of dict_s filter
79 lines
2.2 KiB
PHP
79 lines
2.2 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Symfony\Component\Form\Extension\Validator\ViolationMapper;
|
|
|
|
use Symfony\Component\Form\Exception\ErrorMappingException;
|
|
use Symfony\Component\Form\FormInterface;
|
|
|
|
/**
|
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
|
*/
|
|
class MappingRule
|
|
{
|
|
private FormInterface $origin;
|
|
private string $propertyPath;
|
|
private string $targetPath;
|
|
|
|
public function __construct(FormInterface $origin, string $propertyPath, string $targetPath)
|
|
{
|
|
$this->origin = $origin;
|
|
$this->propertyPath = $propertyPath;
|
|
$this->targetPath = $targetPath;
|
|
}
|
|
|
|
public function getOrigin(): FormInterface
|
|
{
|
|
return $this->origin;
|
|
}
|
|
|
|
/**
|
|
* Matches a property path against the rule path.
|
|
*
|
|
* If the rule matches, the form mapped by the rule is returned.
|
|
* Otherwise this method returns false.
|
|
*/
|
|
public function match(string $propertyPath): ?FormInterface
|
|
{
|
|
return $propertyPath === $this->propertyPath ? $this->getTarget() : null;
|
|
}
|
|
|
|
/**
|
|
* Matches a property path against a prefix of the rule path.
|
|
*/
|
|
public function isPrefix(string $propertyPath): bool
|
|
{
|
|
$length = \strlen($propertyPath);
|
|
$prefix = substr($this->propertyPath, 0, $length);
|
|
$next = $this->propertyPath[$length] ?? null;
|
|
|
|
return $prefix === $propertyPath && ('[' === $next || '.' === $next);
|
|
}
|
|
|
|
/**
|
|
* @throws ErrorMappingException
|
|
*/
|
|
public function getTarget(): FormInterface
|
|
{
|
|
$childNames = explode('.', $this->targetPath);
|
|
$target = $this->origin;
|
|
|
|
foreach ($childNames as $childName) {
|
|
if (!$target->has($childName)) {
|
|
throw new ErrorMappingException(\sprintf('The child "%s" of "%s" mapped by the rule "%s" in "%s" does not exist.', $childName, $target->getName(), $this->targetPath, $this->origin->getName()));
|
|
}
|
|
$target = $target->get($childName);
|
|
}
|
|
|
|
return $target;
|
|
}
|
|
}
|