diff --git a/src/Symfony/Component/Uid/AbstractUid.php b/src/Symfony/Component/Uid/AbstractUid.php index 142234118b3e6..fa35031eaa789 100644 --- a/src/Symfony/Component/Uid/AbstractUid.php +++ b/src/Symfony/Component/Uid/AbstractUid.php @@ -11,6 +11,8 @@ namespace Symfony\Component\Uid; +use Symfony\Component\Uid\Exception\InvalidArgumentException; + /** * @author Nicolas Grekas
*/
@@ -29,41 +31,41 @@ abstract public static function isValid(string $uid): bool;
/**
* Creates an AbstractUid from an identifier represented in any of the supported formats.
*
- * @throws \InvalidArgumentException When the passed value is not valid
+ * @throws InvalidArgumentException When the passed value is not valid
*/
abstract public static function fromString(string $uid): static;
/**
- * @throws \InvalidArgumentException When the passed value is not valid
+ * @throws InvalidArgumentException When the passed value is not valid
*/
public static function fromBinary(string $uid): static
{
if (16 !== \strlen($uid)) {
- throw new \InvalidArgumentException('Invalid binary uid provided.');
+ throw new InvalidArgumentException('Invalid binary uid provided.');
}
return static::fromString($uid);
}
/**
- * @throws \InvalidArgumentException When the passed value is not valid
+ * @throws InvalidArgumentException When the passed value is not valid
*/
public static function fromBase58(string $uid): static
{
if (22 !== \strlen($uid)) {
- throw new \InvalidArgumentException('Invalid base-58 uid provided.');
+ throw new InvalidArgumentException('Invalid base-58 uid provided.');
}
return static::fromString($uid);
}
/**
- * @throws \InvalidArgumentException When the passed value is not valid
+ * @throws InvalidArgumentException When the passed value is not valid
*/
public static function fromBase32(string $uid): static
{
if (26 !== \strlen($uid)) {
- throw new \InvalidArgumentException('Invalid base-32 uid provided.');
+ throw new InvalidArgumentException('Invalid base-32 uid provided.');
}
return static::fromString($uid);
@@ -72,12 +74,12 @@ public static function fromBase32(string $uid): static
/**
* @param string $uid A valid RFC 9562/4122 uid
*
- * @throws \InvalidArgumentException When the passed value is not valid
+ * @throws InvalidArgumentException When the passed value is not valid
*/
public static function fromRfc4122(string $uid): static
{
if (36 !== \strlen($uid)) {
- throw new \InvalidArgumentException('Invalid RFC4122 uid provided.');
+ throw new InvalidArgumentException('Invalid RFC4122 uid provided.');
}
return static::fromString($uid);
diff --git a/src/Symfony/Component/Uid/BinaryUtil.php b/src/Symfony/Component/Uid/BinaryUtil.php
index 1a469fc56829c..7d1e524e5e43e 100644
--- a/src/Symfony/Component/Uid/BinaryUtil.php
+++ b/src/Symfony/Component/Uid/BinaryUtil.php
@@ -11,6 +11,8 @@
namespace Symfony\Component\Uid;
+use Symfony\Component\Uid\Exception\InvalidArgumentException;
+
/**
* @internal
*
@@ -162,7 +164,7 @@ public static function dateTimeToHex(\DateTimeInterface $time): string
{
if (\PHP_INT_SIZE >= 8) {
if (-self::TIME_OFFSET_INT > $time = (int) $time->format('Uu0')) {
- throw new \InvalidArgumentException('The given UUID date cannot be earlier than 1582-10-15.');
+ throw new InvalidArgumentException('The given UUID date cannot be earlier than 1582-10-15.');
}
return str_pad(dechex(self::TIME_OFFSET_INT + $time), 16, '0', \STR_PAD_LEFT);
@@ -171,7 +173,7 @@ public static function dateTimeToHex(\DateTimeInterface $time): string
$time = $time->format('Uu0');
$negative = '-' === $time[0];
if ($negative && self::TIME_OFFSET_INT < $time = substr($time, 1)) {
- throw new \InvalidArgumentException('The given UUID date cannot be earlier than 1582-10-15.');
+ throw new InvalidArgumentException('The given UUID date cannot be earlier than 1582-10-15.');
}
$time = self::fromBase($time, self::BASE10);
$time = str_pad($time, 8, "\0", \STR_PAD_LEFT);
diff --git a/src/Symfony/Component/Uid/CHANGELOG.md b/src/Symfony/Component/Uid/CHANGELOG.md
index f53899b6061c2..31291948419c5 100644
--- a/src/Symfony/Component/Uid/CHANGELOG.md
+++ b/src/Symfony/Component/Uid/CHANGELOG.md
@@ -1,6 +1,11 @@
CHANGELOG
=========
+7.3
+---
+
+ * Add component-specific exception hierarchy
+
7.2
---
diff --git a/src/Symfony/Component/Uid/Command/GenerateUuidCommand.php b/src/Symfony/Component/Uid/Command/GenerateUuidCommand.php
index 2117eb753e30c..cd99acdd34cf5 100644
--- a/src/Symfony/Component/Uid/Command/GenerateUuidCommand.php
+++ b/src/Symfony/Component/Uid/Command/GenerateUuidCommand.php
@@ -20,6 +20,7 @@
use Symfony\Component\Console\Output\ConsoleOutputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
+use Symfony\Component\Uid\Exception\LogicException;
use Symfony\Component\Uid\Factory\UuidFactory;
use Symfony\Component\Uid\Uuid;
@@ -146,7 +147,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
$create = function () use ($namespace, $name): Uuid {
try {
$factory = $this->factory->nameBased($namespace);
- } catch (\LogicException) {
+ } catch (LogicException) {
throw new \InvalidArgumentException('Missing namespace: use the "--namespace" option or configure a default namespace in the underlying factory.');
}
diff --git a/src/Symfony/Component/Uid/Exception/InvalidArgumentException.php b/src/Symfony/Component/Uid/Exception/InvalidArgumentException.php
new file mode 100644
index 0000000000000..c28737bea8b2a
--- /dev/null
+++ b/src/Symfony/Component/Uid/Exception/InvalidArgumentException.php
@@ -0,0 +1,16 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Uid\Exception;
+
+class InvalidArgumentException extends \InvalidArgumentException
+{
+}
diff --git a/src/Symfony/Component/Uid/Exception/InvalidUlidException.php b/src/Symfony/Component/Uid/Exception/InvalidUlidException.php
new file mode 100644
index 0000000000000..cfb42ac5867a7
--- /dev/null
+++ b/src/Symfony/Component/Uid/Exception/InvalidUlidException.php
@@ -0,0 +1,20 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Uid\Exception;
+
+class InvalidUlidException extends InvalidArgumentException
+{
+ public function __construct(string $value)
+ {
+ parent::__construct(\sprintf('Invalid ULID: "%s".', $value));
+ }
+}
diff --git a/src/Symfony/Component/Uid/Exception/InvalidUuidException.php b/src/Symfony/Component/Uid/Exception/InvalidUuidException.php
new file mode 100644
index 0000000000000..97009412b9c63
--- /dev/null
+++ b/src/Symfony/Component/Uid/Exception/InvalidUuidException.php
@@ -0,0 +1,22 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Uid\Exception;
+
+class InvalidUuidException extends InvalidArgumentException
+{
+ public function __construct(
+ public readonly int $type,
+ string $value,
+ ) {
+ parent::__construct(\sprintf('Invalid UUID%s: "%s".', $type ? 'v'.$type : '', $value));
+ }
+}
diff --git a/src/Symfony/Component/Uid/Exception/LogicException.php b/src/Symfony/Component/Uid/Exception/LogicException.php
new file mode 100644
index 0000000000000..2f0f6927cae18
--- /dev/null
+++ b/src/Symfony/Component/Uid/Exception/LogicException.php
@@ -0,0 +1,16 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Uid\Exception;
+
+class LogicException extends \LogicException
+{
+}
diff --git a/src/Symfony/Component/Uid/Factory/UuidFactory.php b/src/Symfony/Component/Uid/Factory/UuidFactory.php
index f95082d2c8b39..2469ab9fdc27e 100644
--- a/src/Symfony/Component/Uid/Factory/UuidFactory.php
+++ b/src/Symfony/Component/Uid/Factory/UuidFactory.php
@@ -11,6 +11,7 @@
namespace Symfony\Component\Uid\Factory;
+use Symfony\Component\Uid\Exception\LogicException;
use Symfony\Component\Uid\Uuid;
use Symfony\Component\Uid\UuidV1;
use Symfony\Component\Uid\UuidV4;
@@ -67,12 +68,15 @@ public function timeBased(Uuid|string|null $node = null): TimeBasedUuidFactory
return new TimeBasedUuidFactory($this->timeBasedClass, $node);
}
+ /**
+ * @throws LogicException When no namespace is defined
+ */
public function nameBased(Uuid|string|null $namespace = null): NameBasedUuidFactory
{
$namespace ??= $this->nameBasedNamespace;
if (null === $namespace) {
- throw new \LogicException(\sprintf('A namespace should be defined when using "%s()".', __METHOD__));
+ throw new LogicException(\sprintf('A namespace should be defined when using "%s()".', __METHOD__));
}
return new NameBasedUuidFactory($this->nameBasedClass, $this->getNamespace($namespace));
diff --git a/src/Symfony/Component/Uid/Tests/Factory/UlidFactoryTest.php b/src/Symfony/Component/Uid/Tests/Factory/UlidFactoryTest.php
index 5f86f736f32d9..3f2c493f57b99 100644
--- a/src/Symfony/Component/Uid/Tests/Factory/UlidFactoryTest.php
+++ b/src/Symfony/Component/Uid/Tests/Factory/UlidFactoryTest.php
@@ -12,6 +12,7 @@
namespace Symfony\Component\Uid\Tests\Factory;
use PHPUnit\Framework\TestCase;
+use Symfony\Component\Uid\Exception\InvalidArgumentException;
use Symfony\Component\Uid\Factory\UlidFactory;
final class UlidFactoryTest extends TestCase
@@ -36,7 +37,7 @@ public function testCreate()
public function testCreateWithInvalidTimestamp()
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('The timestamp must be positive.');
(new UlidFactory())->create(new \DateTimeImmutable('@-1000'));
diff --git a/src/Symfony/Component/Uid/Tests/Factory/UuidFactoryTest.php b/src/Symfony/Component/Uid/Tests/Factory/UuidFactoryTest.php
index 259a84a3fe372..bd3e87fcddf0d 100644
--- a/src/Symfony/Component/Uid/Tests/Factory/UuidFactoryTest.php
+++ b/src/Symfony/Component/Uid/Tests/Factory/UuidFactoryTest.php
@@ -12,6 +12,7 @@
namespace Symfony\Component\Uid\Tests\Factory;
use PHPUnit\Framework\TestCase;
+use Symfony\Component\Uid\Exception\InvalidArgumentException;
use Symfony\Component\Uid\Factory\UuidFactory;
use Symfony\Component\Uid\NilUuid;
use Symfony\Component\Uid\Uuid;
@@ -81,7 +82,7 @@ public function testCreateTimed()
public function testInvalidCreateTimed()
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('The given UUID date cannot be earlier than 1582-10-15.');
(new UuidFactory())->timeBased()->create(new \DateTimeImmutable('@-12219292800.001000'));
diff --git a/src/Symfony/Component/Uid/Tests/UlidTest.php b/src/Symfony/Component/Uid/Tests/UlidTest.php
index 338b699159a77..fe1e15b4cedde 100644
--- a/src/Symfony/Component/Uid/Tests/UlidTest.php
+++ b/src/Symfony/Component/Uid/Tests/UlidTest.php
@@ -12,6 +12,8 @@
namespace Symfony\Component\Uid\Tests;
use PHPUnit\Framework\TestCase;
+use Symfony\Component\Uid\Exception\InvalidArgumentException;
+use Symfony\Component\Uid\Exception\InvalidUlidException;
use Symfony\Component\Uid\MaxUlid;
use Symfony\Component\Uid\NilUlid;
use Symfony\Component\Uid\Tests\Fixtures\CustomUlid;
@@ -41,7 +43,7 @@ public function testGenerate()
public function testWithInvalidUlid()
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidUlidException::class);
$this->expectExceptionMessage('Invalid ULID: "this is not a ulid".');
new Ulid('this is not a ulid');
@@ -151,7 +153,7 @@ public function testFromBinary()
*/
public function testFromBinaryInvalidFormat(string $ulid)
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
Ulid::fromBinary($ulid);
}
@@ -178,7 +180,7 @@ public function testFromBase58()
*/
public function testFromBase58InvalidFormat(string $ulid)
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
Ulid::fromBase58($ulid);
}
@@ -205,7 +207,7 @@ public function testFromBase32()
*/
public function testFromBase32InvalidFormat(string $ulid)
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
Ulid::fromBase32($ulid);
}
@@ -232,7 +234,7 @@ public function testFromRfc4122()
*/
public function testFromRfc4122InvalidFormat(string $ulid)
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
Ulid::fromRfc4122($ulid);
}
diff --git a/src/Symfony/Component/Uid/Tests/UuidTest.php b/src/Symfony/Component/Uid/Tests/UuidTest.php
index 5dfdc6d7c1dde..b6986b09ebaa2 100644
--- a/src/Symfony/Component/Uid/Tests/UuidTest.php
+++ b/src/Symfony/Component/Uid/Tests/UuidTest.php
@@ -12,6 +12,7 @@
namespace Symfony\Component\Uid\Tests;
use PHPUnit\Framework\TestCase;
+use Symfony\Component\Uid\Exception\InvalidArgumentException;
use Symfony\Component\Uid\MaxUuid;
use Symfony\Component\Uid\NilUuid;
use Symfony\Component\Uid\Tests\Fixtures\CustomUuid;
@@ -35,7 +36,7 @@ class UuidTest extends TestCase
*/
public function testConstructorWithInvalidUuid(string $uuid)
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Invalid UUID: "'.$uuid.'".');
Uuid::fromString($uuid);
@@ -58,7 +59,7 @@ public function testInvalidVariant(string $uuid)
$uuid = (string) $uuid;
$class = Uuid::class.'V'.$uuid[14];
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Invalid UUIDv'.$uuid[14].': "'.$uuid.'".');
new $class($uuid);
@@ -381,7 +382,7 @@ public function testFromBinary()
*/
public function testFromBinaryInvalidFormat(string $ulid)
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
Uuid::fromBinary($ulid);
}
@@ -408,7 +409,7 @@ public function testFromBase58()
*/
public function testFromBase58InvalidFormat(string $ulid)
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
Uuid::fromBase58($ulid);
}
@@ -435,7 +436,7 @@ public function testFromBase32()
*/
public function testFromBase32InvalidFormat(string $ulid)
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
Uuid::fromBase32($ulid);
}
@@ -462,7 +463,7 @@ public function testFromRfc4122()
*/
public function testFromRfc4122InvalidFormat(string $ulid)
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
Uuid::fromRfc4122($ulid);
}
@@ -509,7 +510,7 @@ public function testV1ToV6()
public function testV1ToV7BeforeUnixEpochThrows()
{
- $this->expectException(\InvalidArgumentException::class);
+ $this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Cannot convert UUID to v7: its timestamp is before the Unix epoch.');
(new UuidV1('9aba8000-ff00-11b0-b3db-3b3fc83afdfc'))->toV7(); // Timestamp is 1969-01-01 00:00:00.0000000
diff --git a/src/Symfony/Component/Uid/Ulid.php b/src/Symfony/Component/Uid/Ulid.php
index 1240b019e28e2..9170d429b0eb7 100644
--- a/src/Symfony/Component/Uid/Ulid.php
+++ b/src/Symfony/Component/Uid/Ulid.php
@@ -11,6 +11,9 @@
namespace Symfony\Component\Uid;
+use Symfony\Component\Uid\Exception\InvalidArgumentException;
+use Symfony\Component\Uid\Exception\InvalidUlidException;
+
/**
* A ULID is lexicographically sortable and contains a 48-bit timestamp and 80-bit of crypto-random entropy.
*
@@ -36,7 +39,7 @@ public function __construct(?string $ulid = null)
$this->uid = $ulid;
} else {
if (!self::isValid($ulid)) {
- throw new \InvalidArgumentException(\sprintf('Invalid ULID: "%s".', $ulid));
+ throw new InvalidUlidException($ulid);
}
$this->uid = strtoupper($ulid);
@@ -154,7 +157,7 @@ public static function generate(?\DateTimeInterface $time = null): string
$time = microtime(false);
$time = substr($time, 11).substr($time, 2, 3);
} elseif (0 > $time = $time->format('Uv')) {
- throw new \InvalidArgumentException('The timestamp must be positive.');
+ throw new InvalidArgumentException('The timestamp must be positive.');
}
if ($time > self::$time || (null !== $mtime && $time !== self::$time)) {
diff --git a/src/Symfony/Component/Uid/Uuid.php b/src/Symfony/Component/Uid/Uuid.php
index c956156a3d580..66717f2ca1d2e 100644
--- a/src/Symfony/Component/Uid/Uuid.php
+++ b/src/Symfony/Component/Uid/Uuid.php
@@ -11,6 +11,8 @@
namespace Symfony\Component\Uid;
+use Symfony\Component\Uid\Exception\InvalidUuidException;
+
/**
* @author GrĂ©goire Pineau Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages. Alternative Proxies:Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.