Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Modules\Languages;
- enum Locale: string
- {
- case FRENCH = 'fr';
- case ENGLISH = 'en';
- }
- ?>
- <?php
- namespace Modules\Languages\ValueObjects;
- use Modules\Languages\Locale;
- use Spatie\LaravelData\Attributes\WithCast;
- use Spatie\LaravelData\Casts\EnumCast;
- use Spatie\LaravelData\Data;
- final class TranslatableData extends Data
- {
- public function __construct(
- #[WithCast(EnumCast::class)]
- public readonly Locale $locale,
- public readonly string $translation,
- ) {
- }
- }
- ?>
- <?php
- namespace Modules\Languages\ValueObjects;
- use DateTimeImmutable;
- use Modules\Languages\Transformers\TranslatableTransformer;
- use Shared\Transformers\TimestampTransformer;
- use Spatie\LaravelData\Attributes\DataCollectionOf;
- use Spatie\LaravelData\Attributes\Validation\Rule;
- use Spatie\LaravelData\Attributes\Validation\StringType;
- use Spatie\LaravelData\Attributes\WithCast;
- use Spatie\LaravelData\Attributes\WithTransformer;
- use Spatie\LaravelData\Casts\DateTimeInterfaceCast;
- use Spatie\LaravelData\Data;
- use Spatie\LaravelData\DataCollection;
- use Spatie\LaravelData\Optional;
- final class LanguageData extends Data
- {
- public function __construct(
- #[DataCollectionOf(TranslatableData::class)]
- #[WithTransformer(TranslatableTransformer::class)]
- public readonly DataCollection $name,
- #[DataCollectionOf(TranslatableData::class)]
- public readonly DataCollection|Optional $description,
- #[WithCast(DateTimeInterfaceCast::class)]
- #[WithTransformer(TimestampTransformer::class)]
- public readonly ?DateTimeImmutable $created_at = new DateTimeImmutable,
- #[WithCast(DateTimeInterfaceCast::class)]
- #[WithTransformer(TimestampTransformer::class)]
- public readonly ?DateTimeImmutable $updated_at = new DateTimeImmutable,
- ) {
- }
- public static function rules(): array
- {
- return [
- 'name.*' => ['unique_translation:languages']
- ];
- }
- }
- <?php
- namespace Modules\Languages\Transformers;
- use Illuminate\Support\Arr;
- use Spatie\LaravelData\DataCollection;
- use Spatie\LaravelData\Support\DataProperty;
- use Spatie\LaravelData\Transformers\Transformer;
- final class TranslatableTransformer implements Transformer
- {
- public function transform(DataProperty $property, mixed $value): mixed
- {
- if ($value instanceof DataCollection) {
- return Arr::pluck($value->toArray(), 'translation', 'locale');
- }
- return $value;
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment