How to check if every field is invalid?

Viewed 50

I have a failed() which check if field is in array. In class ValidationAttributes failed() should return array with every field which invalid. Now show me errorFatal error: Uncaught Error: Call to a member function failed() on array in I don't have idea how to change, that function check if field is valid or invalid.

class Validation
{
    private function __construct(private array $fieldsAndMessages)
    {
    }

    public static function failure(string $fieldName, string $message): Validation
    {
        return new self([$fieldName => $message]);
    }

    public static function success(): Validation
    {
        return new self([]);
    }

    public function failed(string $fieldName): bool
    {
        return \array_key_exists($fieldName, $this->fieldsAndMessages);
    }

    public function message(string $fieldName): string
    {
        if (\array_key_exists($fieldName, $this->fieldsAndMessages)) {
            return $this->fieldsAndMessages[$fieldName];
        }
        throw new Exception("Field validation  wasn't failed");
    }
}

class ValidationAttributes
{
    public function __construct(private Validation|array $validation, private array $attributes)
    {
    }

    public function failed(string $field): bool
    {
        if (!\in_array($field, $this->attributes)) {
            throw new ViewAttributeException("Validation attribute '$field' isn't defined");
        }
        return $this->validation->failed($field);
    }

    public function message(string $field): array
    {
        if (!\in_array($field, $this->attributes)) {
            throw new ViewAttributeException("Validation attribute '$field' isn't defined");
        }
        return $this->validation->message($field);
    }
}

  <? if ($this->validation->failed("photo")): ?>
                        <span class="error">
                            <?= htmlSpecialChars($this->validation->message("photo")); ?>
                        </span>
                    <? endif; ?>

    $errors = [];
    if ($request->settingsSubmit()) {
                if ($request->wantsSubmitPhoto()) {
                    $extensionPhoto = new PhotoExtension($request->photo());
                    if (!in_array($extensionPhoto->getExtension(), ['jpg', 'png', 'jpeg'])) {
                        $errors[] = Validation::failure('photo', 'Invalid extension');
                    }
                }

                if ($request->wantsSubmitAvatar()) {
                    $extensionAvatar = new AvatarExtension($request->avatar());
                    if (!in_array($extensionAvatar->getExtension(), ['jpg', 'png', 'jpeg'])) {
                        $errors[] = Validation::failure('avatar', 'Invalid extension');
                    }
                     return new SettingsView($userId, $errors);
                }
            return new SettingsView($userId, Validation::success());
            }

<!-- begin snippet: js hide: false console: true babel: false -->

class SettingsView extends View
{
    public ValidationAttributes $validation;

    public function __construct(int $userId, Validation| array $validation)
    {
        parent::__construct('src/mess/view/pages/settings.php', [
            'profile' => new Profile($userId),
        ]);
        $this->validation = new ValidationAttributes($validation, [
            'photo',
            'avatar',
            'lastName',
            'work',
            'school',
            'relationship',
            'phoneNumber',
            'place'
        ]);
    }
}

0 Answers
Related