Merge branch '3.4' into 4.4
* 3.4: [Validator] Add missing vietnamese translations add German translation [Validator][ConstraintValidator] Update wrong PRETTY_DATE doc [DomCrawler][Form] Fix PHPDoc on get & offsetGet prevent method calls on null values Return int if scale = 0
This commit is contained in:
commit
8f7b8aa41d
@ -279,7 +279,7 @@ class Form extends Link implements \ArrayAccess
|
||||
*
|
||||
* @param string $name The field name
|
||||
*
|
||||
* @return FormField The field instance
|
||||
* @return FormField|FormField[]|FormField[][] The value of the field
|
||||
*
|
||||
* @throws \InvalidArgumentException When field is not present in this form
|
||||
*/
|
||||
@ -323,7 +323,7 @@ class Form extends Link implements \ArrayAccess
|
||||
*
|
||||
* @param string $name The field name
|
||||
*
|
||||
* @return FormField The associated Field instance
|
||||
* @return FormField|FormField[]|FormField[][] The value of the field
|
||||
*
|
||||
* @throws \InvalidArgumentException if the field does not exist
|
||||
*/
|
||||
|
@ -66,7 +66,7 @@ class FormFieldRegistry
|
||||
/**
|
||||
* Returns the value of the field based on the fully qualifed name and its children.
|
||||
*
|
||||
* @return mixed The value of the field
|
||||
* @return FormField|FormField[]|FormField[][] The value of the field
|
||||
*
|
||||
* @throws \InvalidArgumentException if the field does not exist
|
||||
*/
|
||||
|
@ -12,6 +12,7 @@
|
||||
namespace Symfony\Component\DomCrawler\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\DomCrawler\Field\TextareaFormField;
|
||||
use Symfony\Component\DomCrawler\Form;
|
||||
use Symfony\Component\DomCrawler\FormFieldRegistry;
|
||||
|
||||
@ -965,7 +966,7 @@ class FormTest extends TestCase
|
||||
return $dom;
|
||||
}
|
||||
|
||||
public function testgetPhpValuesWithEmptyTextarea()
|
||||
public function testGetPhpValuesWithEmptyTextarea()
|
||||
{
|
||||
$dom = new \DOMDocument();
|
||||
$dom->loadHTML('
|
||||
@ -980,4 +981,34 @@ class FormTest extends TestCase
|
||||
$form = new Form($nodes->item(0), 'http://example.com');
|
||||
$this->assertEquals($form->getPhpValues(), ['example' => '']);
|
||||
}
|
||||
|
||||
public function testGetReturnTypes()
|
||||
{
|
||||
$dom = new \DOMDocument();
|
||||
$dom->loadHTML('
|
||||
<html>
|
||||
<form>
|
||||
<textarea name="foo[collection][0][bar]">item 0</textarea>
|
||||
</form>
|
||||
</html>'
|
||||
);
|
||||
|
||||
$nodes = $dom->getElementsByTagName('form');
|
||||
$form = new Form($nodes->item(0), 'http://example.com');
|
||||
|
||||
// FormField
|
||||
$this->assertInstanceOf(TextareaFormField::class, $textareaFormField = $form->get('foo[collection][0][bar]'));
|
||||
|
||||
// Array of FormField
|
||||
$this->assertSame([
|
||||
'bar' => $textareaFormField,
|
||||
], $form->get('foo[collection][0]'));
|
||||
|
||||
// Array of array of FormField
|
||||
$this->assertSame([
|
||||
[
|
||||
'bar' => $textareaFormField,
|
||||
],
|
||||
], $form->get('foo[collection]'));
|
||||
}
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ class NumberToLocalizedStringTransformer implements DataTransformerInterface
|
||||
break;
|
||||
}
|
||||
|
||||
$number /= $roundingCoef;
|
||||
$number = 1 === $roundingCoef ? (int) $number : $number / $roundingCoef;
|
||||
}
|
||||
|
||||
return $number;
|
||||
|
@ -370,7 +370,7 @@ class NumberToLocalizedStringTransformerTest extends TestCase
|
||||
{
|
||||
$transformer = new NumberToLocalizedStringTransformer($scale, null, $roundingMode);
|
||||
|
||||
$this->assertEquals($output, $transformer->reverseTransform($input));
|
||||
$this->assertSame($output, $transformer->reverseTransform($input));
|
||||
}
|
||||
|
||||
public function testReverseTransformDoesNotRoundIfNoScale()
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace Symfony\Component\Serializer\Encoder;
|
||||
|
||||
use Symfony\Component\Serializer\Exception\BadMethodCallException;
|
||||
use Symfony\Component\Serializer\Exception\NotEncodableValueException;
|
||||
use Symfony\Component\Serializer\SerializerAwareInterface;
|
||||
use Symfony\Component\Serializer\SerializerAwareTrait;
|
||||
@ -413,7 +414,7 @@ class XmlEncoder implements EncoderInterface, DecoderInterface, NormalizationAwa
|
||||
$removeEmptyTags = $this->context[self::REMOVE_EMPTY_TAGS] ?? $this->defaultContext[self::REMOVE_EMPTY_TAGS] ?? false;
|
||||
$encoderIgnoredNodeTypes = $this->context[self::ENCODER_IGNORED_NODE_TYPES] ?? $this->defaultContext[self::ENCODER_IGNORED_NODE_TYPES];
|
||||
|
||||
if (\is_array($data) || ($data instanceof \Traversable && !$this->serializer->supportsNormalization($data, $this->format))) {
|
||||
if (\is_array($data) || ($data instanceof \Traversable && (null === $this->serializer || !$this->serializer->supportsNormalization($data, $this->format)))) {
|
||||
foreach ($data as $key => $data) {
|
||||
//Ah this is the magic @ attribute types.
|
||||
if (0 === strpos($key, '@') && $this->isElementNameValid($attributeName = substr($key, 1))) {
|
||||
@ -452,6 +453,10 @@ class XmlEncoder implements EncoderInterface, DecoderInterface, NormalizationAwa
|
||||
}
|
||||
|
||||
if (\is_object($data)) {
|
||||
if (null === $this->serializer) {
|
||||
throw new BadMethodCallException(sprintf('The serializer needs to be set to allow %s() to be used with object data.', __METHOD__));
|
||||
}
|
||||
|
||||
$data = $this->serializer->normalize($data, $this->format, $this->context);
|
||||
if (null !== $data && !is_scalar($data)) {
|
||||
return $this->buildXml($parentNode, $data, $xmlRootNodeName);
|
||||
@ -514,6 +519,10 @@ class XmlEncoder implements EncoderInterface, DecoderInterface, NormalizationAwa
|
||||
} elseif ($val instanceof \Traversable) {
|
||||
$this->buildXml($node, $val);
|
||||
} elseif (\is_object($val)) {
|
||||
if (null === $this->serializer) {
|
||||
throw new BadMethodCallException(sprintf('The serializer needs to be set to allow %s() to be used with object data.', __METHOD__));
|
||||
}
|
||||
|
||||
return $this->selectNodeType($node, $this->serializer->normalize($val, $this->format, $this->context));
|
||||
} elseif (is_numeric($val)) {
|
||||
return $this->appendText($node, (string) $val);
|
||||
|
@ -68,6 +68,10 @@ class ArrayDenormalizer implements ContextAwareDenormalizerInterface, Serializer
|
||||
*/
|
||||
public function supportsDenormalization($data, $type, $format = null, array $context = []): bool
|
||||
{
|
||||
if (null === $this->serializer) {
|
||||
throw new BadMethodCallException(sprintf('The serializer needs to be set to allow %s() to be used.', __METHOD__));
|
||||
}
|
||||
|
||||
return '[]' === substr($type, -2)
|
||||
&& $this->serializer->supportsDenormalization($data, substr($type, 0, -2), $format, $context);
|
||||
}
|
||||
|
@ -21,8 +21,8 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
|
||||
abstract class ConstraintValidator implements ConstraintValidatorInterface
|
||||
{
|
||||
/**
|
||||
* Whether to format {@link \DateTime} objects as RFC-3339 dates
|
||||
* ("Y-m-d H:i:s").
|
||||
* Whether to format {@link \DateTime} objects, either with the {@link \IntlDateFormatter}
|
||||
* (if it is available) or as RFC-3339 dates ("Y-m-d H:i:s").
|
||||
*/
|
||||
const PRETTY_DATE = 1;
|
||||
|
||||
@ -69,7 +69,8 @@ abstract class ConstraintValidator implements ConstraintValidatorInterface
|
||||
* in double quotes ("). Objects, arrays and resources are formatted as
|
||||
* "object", "array" and "resource". If the $format bitmask contains
|
||||
* the PRETTY_DATE bit, then {@link \DateTime} objects will be formatted
|
||||
* as RFC-3339 dates ("Y-m-d H:i:s").
|
||||
* with the {@link \IntlDateFormatter}. If it is not available, they will be
|
||||
* formatted as RFC-3339 dates ("Y-m-d H:i:s").
|
||||
*
|
||||
* Be careful when passing message parameters to a constraint violation
|
||||
* that (may) contain objects, arrays or resources. These parameters
|
||||
|
@ -370,6 +370,10 @@
|
||||
<source>This value is not a valid hostname.</source>
|
||||
<target>Dieser Wert ist kein gültiger Hostname.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="96">
|
||||
<source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
|
||||
<target>Die Anzahl an Elementen in dieser Sammlung sollte ein Vielfaches von {{ compared_value }} sein.</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
@ -362,6 +362,18 @@
|
||||
<source>This password has been leaked in a data breach, it must not be used. Please use another password.</source>
|
||||
<target>Mật khẩu này đã bị rò rỉ dữ liệu, không được sử dụng nữa. Xin vui lòng sử dụng mật khẩu khác.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="94">
|
||||
<source>This value should be between {{ min }} and {{ max }}.</source>
|
||||
<target>Giá trị này nên thuộc giữa {{ min }} và {{ max }}.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="95">
|
||||
<source>This value is not a valid hostname.</source>
|
||||
<target>Giá trị này không phải là tên máy chủ hợp lệ.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="96">
|
||||
<source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
|
||||
<target>Số lượng các phần tử trong bộ sưu tập này nên là bội số của {{compared_value}}.</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
Reference in New Issue
Block a user