laravel - spatielaraval-data WithCast validation error - Stack Overflow

Trying to cast $address_val to Address object:class AlbumData extends Data{public string $title;#[Wit

Trying to cast $address_val to Address object:

class AlbumData extends Data
{
    public string $title;
    #[WithCast(AddressCast::class)]
    public ?Address $address_val;
    
}

try {
    AlbumData::validateAndCreate([
        'title' => 'Never Gonna Give You Up',
        'address_val' => 'Never Gonna Give You Up',
    ]);
} catch (ValidationException  $exception) {
    dump($exception->validator->errors()->all());
    dd($exception->getMessage());
}

Error message:

> "The address_val field must be an array."

class Address extends Data
{
    public function __construct(
        public ?string $text,
    ) {}
}

class AddressCast implements Cast
{
    public function cast(DataProperty $property, mixed $value, array $properties, CreationContext $context): Address
    {
        return new Address($value);
    }
}

What am I doing wrong?

Notes:

  1. If you use the from method instead of validateAndCreate, then there is no error and everything works properly.
  2. If Address NOT extends Data, aslo works properly.

Trying to cast $address_val to Address object:

class AlbumData extends Data
{
    public string $title;
    #[WithCast(AddressCast::class)]
    public ?Address $address_val;
    
}

try {
    AlbumData::validateAndCreate([
        'title' => 'Never Gonna Give You Up',
        'address_val' => 'Never Gonna Give You Up',
    ]);
} catch (ValidationException  $exception) {
    dump($exception->validator->errors()->all());
    dd($exception->getMessage());
}

Error message:

> "The address_val field must be an array."

class Address extends Data
{
    public function __construct(
        public ?string $text,
    ) {}
}

class AddressCast implements Cast
{
    public function cast(DataProperty $property, mixed $value, array $properties, CreationContext $context): Address
    {
        return new Address($value);
    }
}

What am I doing wrong?

Notes:

  1. If you use the from method instead of validateAndCreate, then there is no error and everything works properly.
  2. If Address NOT extends Data, aslo works properly.
Share Improve this question asked Mar 12 at 20:33 EnikiBenikiEnikiBeniki 9911 gold badge13 silver badges28 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0
class AlbumData extends Data
{
    public string $title;
    #[WithCast(AddressCast::class)]
    public ?Address $address_val;
    
}

try {
    AlbumData::validateAndCreate([
        'title' => 'Never Gonna Give You Up',
        'address_val' => 'Never Gonna Give You Up', <-- HERE
    ]);
} catch (ValidationException  $exception) {
    dump($exception->validator->errors()->all());
    dd($exception->getMessage());
}

Data class from() method doesn't perform validation and validateAndCreate() expects array like this:

AlbumData::validateAndCreate([
        'title' => 'Never Gonna Give You Up',
        'address_val' => ['text' => Never Gonna Give You Up'], <-- FIX
    ]);

Other depends on your business logic, wether to keep your class extended or not

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744731644a4590500.html

相关推荐

  • laravel - spatielaraval-data WithCast validation error - Stack Overflow

    Trying to cast $address_val to Address object:class AlbumData extends Data{public string $title;#[Wit

    1天前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信