custom-validator skill
Symfony kısıtlamaları veya Laravel doğrulama kurallarını kullanarak API Platform kaynakları için özel doğrulama kısıtlamaları oluşturun.
- GitHub yıldızları
- 29
- Dosyalar
- 1
- Son commit
- 22 Eki 2026
- Lisans
- —
- İzin verilen araçlar
- —
custom-validator skill ne işe yarar?
custom-validator bir agent skill'dir. Symfony kısıtlamaları veya Laravel doğrulama kurallarını kullanarak API Platform kaynakları için özel doğrulama kısıtlamaları oluşturun.
Özet, skill'in SKILL.md dosyasından oluşturuldu.
custom-validator skilli hakkında
Bu SKILL, backend geliştiricilerin API Platform kaynakları için karmaşık iş mantıkları geliştirmesini sağlar. Standart Symfony veya Laravel kurallarının belirli gereksinimler için yetersiz kaldığı durumlarda, özel doğrulama kısıtlamalarını uygulamak için gerekli desenleri sunar. Bir agent, kullanıcının alana özgü formatları zorunlu kılması, benzersizlik kontrolü yapması veya yazma işlemleri sırasında hız ve plan limitlerini uygulaması gerektiğinde bu SKILL'i yüklemelidir.
Symfony tabanlı projeler için bu SKILL, hesap limiti kontrolleri gibi mantıkları yönetmek amacıyla bir Constraint sınıfı ve buna karşılık gelen bir ConstraintValidator sınıfının nasıl oluşturulacağını gösterir. Ayrıca, çoklu alan doğrulaması için sınıf düzeyinde kısıtlamaları ve DTO'lar için callback doğrulamasını da kapsar. Laravel ortamları için ise ApiResource özniteliği içindeki rules seçeneğinin kullanımına odaklanarak dizileri, closure yapılarını veya FormRequest sınıf dizelerini destekler. Bu sayede özel iş kurallarının doğru şekilde 422 ConstraintViolationList yanıtları üretmesini sağlar.
Bir agent bununla neler yapabilir
- 1Plan tabanlı hesap limitlerini zorunlu kılınKullanıcıların mevcut abonelik planlarına bağlı olarak belirli bir hesap sayısını aşmalarını engelleyen bir doğrulayıcı oluşturun.
Skill'in SKILL.md dosyasından yazılmıştır. Her kullanım durumu oradaki bir alıntı ile kontrol edilir.
custom-validator skill nasıl kurulur
Her komut, skill klasörünü istemcinin skills dizinine kopyalar. Yüklemek için istemciyi yeniden başlatın veya yeni bir oturum başlatın.custom-validator skill'ini Eklenti uygulamasına kur
/plugin marketplace add api-platform/skillset /plugin install api-platform@api-platform-skillset
custom-validator skill'ini Claude Code uygulamasına kur
~/.claude/skills/custom-validator/SKILL.md
$ npx degit api-platform/skillset/skills/custom-validator ~/.claude/skills/custom-validatorcustom-validator skill'ini Claude Code (project) uygulamasına kur
.claude/skills/custom-validator/SKILL.md
$ npx degit api-platform/skillset/skills/custom-validator .claude/skills/custom-validatorcustom-validator skill'ini Codex uygulamasına kur
~/.agents/skills/custom-validator/SKILL.md
$ npx degit api-platform/skillset/skills/custom-validator ~/.agents/skills/custom-validatorcustom-validator skill'ini Gemini CLI uygulamasına kur
~/.gemini/skills/custom-validator/SKILL.md
$ npx degit api-platform/skillset/skills/custom-validator ~/.gemini/skills/custom-validatorcustom-validator skill'ini Claude.ai uygulamasına kur
npx degit api-platform/skillset/skills/custom-validator custom-validator && zip -r custom-validator.zip custom-validator # claude.ai → Customize → Skills → + → Create skill → Upload a skill → custom-validator.zip
SKILL.md
GitHub'da görüntüleCustom Validation Constraints
Create custom validators when built-in Symfony constraints are insufficient.
Constraint Class
<?php
namespace App\Validator;
use Symfony\Component\Validator\Constraint;
#[\Attribute(\Attribute::TARGET_PROPERTY | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
class IsValidAccountLimit extends Constraint
{
public string $message = 'Account limit reached for your current plan.';
public int $limit = 50;
}
Validator Class
Convention: {ConstraintName}Validator in the same namespace.
<?php
namespace App\Validator;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class IsValidAccountLimitValidator extends ConstraintValidator
{
public function __construct(
private readonly UserHelper $userHelper,
private readonly AccountRepository $accountRepository,
) {}
public function validate(mixed $value, Constraint $constraint): void
{
if (!$constraint instanceof IsValidAccountLimit) {
throw new \InvalidArgumentException('Unexpected constraint type');
}
if (null === $value || '' === $value) {
return;
}
$user = $this->userHelper->getUser();
$count = $this->accountRepository->countByUser($user->getId());
if ($count >= $constraint->limit) {
$this->context->buildViolation($constraint->message)
->addViolation();
}
}
}
Usage on Properties
use App\Validator\IsValidAccountLimit;
use Symfony\Component\Validator\Constraints as Assert;
class Account
{
#[Assert\NotBlank(groups: ['account:write'])]
#[Assert\Email(groups: ['account:write'])]
#[IsValidAccountLimit(groups: ['account:write'])]
public ?string $address;
}
Class-Level Constraint (UniqueEntity)
For constraints that validate across multiple fields:
#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)]
class MongoDBUnique extends Constraint
{
public array $fields = [];
public string $message = 'This value is already used.';
public function getTargets(): string
{
return self::CLASS_CONSTRAINT;
}
}
Usage:
#[MongoDBUnique(fields: ['address'], groups: ['account:write', 'account:patch'])]
class Account {}
Validation Groups with Operations
Target a constraint to specific operations by passing groups: (as shown above)
and wiring those groups into each operation's validationContext — see
operations for the full per-operation setup.
Callback Validation
For quick one-off validation on DTOs:
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
class SendMessage
{
public ?string $text = null;
public ?string $html = null;
#[Assert\Callback]
public function validateContent(ExecutionContextInterface $context): void
{
if (null === $this->text && null === $this->html) {
$context->buildViolation('Either text or html content is required.')
->atPath('text')
->addViolation();
}
}
}
Laravel
Laravel does not use Symfony Constraints/ConstraintValidator. Validation is
declared with Laravel validation rules via the
rules option on #[ApiResource] or per-operation (rules can be an array, a closure,
or a FormRequest class-string). The ValidateProvider runs them before the
processor and emits the same 422 ConstraintViolationList shape.
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Post;
#[ApiResource(rules: ['title' => 'required|min:2'])]
#[Post(rules: ['isbn' => ['required', 'string']])] // per-operation override
class Book extends Model {}
For business rules beyond built-in rules, write a Laravel custom rule (a class
implementing Illuminate\Contracts\Validation\ValidationRule, scaffold with
php artisan make:rule) or a closure rule, and reference it in rules. A
FormRequest class-string is also accepted — its authorize()/rules() run, and an
AuthorizationException maps to 403, ValidationException to 422. Validation groups
and Symfony validationContext do not apply on Laravel; scope rules per operation
instead. Partial PATCH can relax required to sometimes via
partial_patch_validation in config/api-platform.php.
Bu becerideki dosyalar
1custom-validator skill soruları
custom-validator skill'ini Claude Code uygulamasına nasıl kurarım?
npx degit api-platform/skillset/skills/custom-validator ~/.claude/skills/custom-validator komutunu çalıştırın. Claude Code, skill'leri ~/.claude/skills (tüm projeler) veya .claude/skills (tek proje) konumundan yükler ve açıklaması görevle eşleştiğinde skill'i kullanır.
custom-validator skill'ini hangi istemciler kullanabilir?
Agent Skills biçimini okuyan her istemci: Claude Code, Codex, Gemini CLI ve claude.ai (ZIP olarak yükleyin). Skill içindeki betikler yalnızca istemcinin kod çalıştırmaya izin verdiği yerlerde çalışır.
API Platform için Symfony'de nasıl özel bir doğrulayıcı oluştururum?
Aynı namespace altında {ConstraintName}Validator isimlendirme kuralını takip ederek bir Constraint sınıfı ve buna karşılık gelen bir Validator sınıfı oluşturmanız gerekir.