ramsey/uuid
Generate and work with UUIDs in PHP using ramsey/uuid. Create v1, v4, and other UUID types, parse and validate UUID strings, and integrate easily via Composer. Well-documented, widely used, and standards-aware for reliable identifiers.
Installation:
composer require ramsey/uuid
Add to composer.json if needed:
"require": {
"ramsey/uuid": "^4.9"
}
First Use Case: Generate a UUIDv4 (random) in a Laravel controller:
use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\InvalidArgumentException;
$uuid = Uuid::uuid4();
return response()->json(['uuid' => $uuid->toString()]);
Where to Look First:
Uuid facade class (core methods)UuidFactory for custom generators$uuid = Uuid::uuid4(); // Default
$uuid->toString(); // "123e4567-e89b-12d3-a456-426614174000"
$uuid = Uuid::uuid6(); // RFC 9562 (ordered time)
$uuid = Uuid::uuid7(); // Unix epoch time (monotonic)
$generator = Uuid::getFactory()->makeCombGenerator();
$uuid = $generator->generate();
$uuid = Uuid::fromString('123e4567-e89b-12d3-a456-426614174000');
$uuid = Uuid::fromHexadecimal('123e4567e89b12d3a456426614174000');
$uuid = Uuid::fromBytes(\hex2bin('123e4567e89b12d3a456426614174000'));
if (Uuid::isValid('123e4567-e89b-12d3-a456-426614174000')) {
$uuid = Uuid::fromString('123e4567-e89b-12d3-a456-426614174000');
}
use Illuminate\Database\Eloquent\Model;
use Ramsey\Uuid\UuidInterface;
class Post extends Model {
protected $keyType = 'string';
public $incrementing = false;
protected $casts = ['id' => UuidInterface::class];
protected static function boot() {
parent::boot();
static::creating(function ($model) {
$model->{$model->getKeyName()} = Uuid::uuid4();
});
}
}
Schema::create('posts', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('title');
$table->timestamps();
});
return response()->json(['id' => $uuid]); // Auto-converts to string
$uuid->toString(); // Standard string
$uuid->toHexadecimal(); // Compact hex
$uuid->getBytes(); // Binary
$mockUuid = Uuid::fromString('00000000-0000-0000-0000-000000000000');
$this->assertEquals('00000000-0000-0000-0000-000000000000', $mockUuid->toString());
// app/Providers/AppServiceProvider.php
public function register() {
$this->app->bind(UuidInterface::class, function () {
return Uuid::uuid4();
});
}
// app/Http/Requests/StorePostRequest.php
public function rules() {
return [
'id' => 'sometimes|uuid',
'external_id' => 'nullable|uuid',
];
}
// app/Models/Post.php
public function scopeWithUuid($query, $uuid) {
return $query->where('id', $uuid->toString());
}
// app/Http/Resources/PostResource.php
public function toArray($request) {
return [
'id' => $this->id->toString(),
'title' => $this->title,
];
}
Version Confusion:
Uuid::uuid7() for time-ordered IDs (e.g., database primary keys).Serialization Issues:
Uuid implements Stringable (v4.7.4+):
$uuid->__toString(); // Works in all contexts
Database Collisions:
Deprecated Methods:
Uuid::UUID_TYPE_PEABODY → Use UUID_TYPE_REORDERED_TIME (v6).CombGenerator → Deprecated; use Uuid::uuid7() instead.PHP 8.5+ Warnings:
(int) casts may trigger warnings.ramsey/uuid:^4.9.2 for fixes.Invalid UUIDs:
Uuid::isValid() before parsing:
if (!Uuid::isValid($input)) {
throw new \InvalidArgumentException('Invalid UUID format');
}
Version Detection:
$uuid->getVersion(); // Returns 4, 6, 7, etc.
Binary vs. String:
$binary = $uuid->getBytes();
$hex = $uuid->toHexadecimal();
$string = $uuid->toString();
Performance:
microtime()).Custom Codecs:
CodecInterface for custom encoding:
class CustomCodec implements CodecInterface {
public function encode(UuidInterface $uuid): string { ... }
public function decode(string $string): UuidInterface { ... }
}
UUID Generators:
AbstractGenerator for custom logic:
class CustomGenerator extends AbstractGenerator {
protected function generate(): UuidInterface {
return Uuid::fromString('custom-' . Uuid::uuid4());
}
}
Laravel Observers:
class PostObserver {
public function creating(Post $post) {
$post->id = Uuid::uuid4();
}
}
API Middleware:
public function handle($request, Closure $next) {
if ($request->has('id') && !Uuid::isValid($request->id)) {
throw new \InvalidArgumentException('Invalid UUID');
}
return $next($request);
}
random_bytes() (secure by default).How can I help you explore Laravel packages today?