Proje: Okul Platform · Hub: Okul Platform — Conventions
Consent checkbox pattern
Tüm lead/contact form’larında KVKK sözleşmesi ile pazarlama izni ayrı checkbox’larda gösterilir. Tek bir “Kullanıcı sözleşmesi VE pazarlama izni” combined checkbox kullanılmaz.
Field isimleri (kanonik)
kvkk_consent— Kullanıcı ve Gizlilik Sözleşmesi (zorunlu)marketing_consent— Pazarlama / KVKK ticari elektronik ileti izni (opsiyonel)
Eski terms field’ı deprecated; yeni form’larda kullanma. Sadece bazı legacy endpoint’lerde hâlâ aranır (bkz. 2026-05-06-consent-fe-bypass-broken-endpoints).
Blade pattern
@if(!\App\Service\UserService::hasAuthUserConsentedToKvkk())
<visible kvkk_consent checkbox>
@else
{{ Form::hidden('kvkk_consent', 1) }}
@endif
@if(!\App\Service\UserService::hasAuthUserConsentedToMarketing())
<visible marketing_consent checkbox>
@else
{{ Form::hidden('marketing_consent', 1) }}
@endifNeden @else ile hidden input?
Login olmuş, daha önce consent vermiş kullanıcıya checkbox tekrar gösterilmez. Ama BE’ye değer gitmesi gerekiyorsa (legacy terms-bekleyen endpoint’ler veya gelecekte sıkı validation) hidden input ile otomatik 1 yollanır.
Helper’lar
app/Service/UserService.php:
hasAuthUserConsentedToKvkk(): bool— User imza tablosundan (UserAgreementTextSign+ aktifTYPE_B2C_KVKK_CONSENTagreement) veyauser_details.kvkk === '1'. Cache’li (KVKK_CONSENT_CACHE_TTL_DAYS).hasAuthUserConsentedToMarketing(): bool—user_details.notification === Config::USER_NOTIFICATION_ALL_ID.
Backend validation pattern
FormRequest rules:
use App\Service\UserService;
'kvkk_consent' => [
UserService::hasAuthUserConsentedToKvkk() ? 'sometimes' : 'required',
'accepted',
],
'marketing_consent' => [
'sometimes',
'accepted',
],Mesajlar:
'kvkk_consent.required' => 'Kullanıcı sözleşmesini kabul etmelisiniz.',
'kvkk_consent.accepted' => 'Kullanıcı sözleşmesini kabul etmelisiniz.',
'marketing_consent.accepted' => 'Pazarlama iznini kabul etmelisiniz.',Persist:
- KVKK →
UserAgreementTextSigninsert (aktif agreement) veyauser_details.kvkk = '1'. Cache invalidate:UserService::forgetKvkkConsentCacheForUser($userId). - Marketing →
user_details.notification = Config::USER_NOTIFICATION_ALL_ID.
SchoolOfferService::validate() (~line 420) referans implementasyon. ConsentService::normalizeKvkkConsent() ve normalizeMarketingConsent() helper’ları var.
Bu pattern’e sahip endpoint’ler (referans)
Front/SchoolOfferRequest.php—/ajax/submitOfferForm/{id},/ajax/submitDynFormFront/SchoolCommentRequest.php—/ajax/addCommentFront/RegisterRequest.php—/uye-olFront/ProfilingMultiOfferRequest.php—/egitim-yaklasimi-testi/cok-okula-basvur
Related
- 2026-05-06-consent-fe-bypass-broken-endpoints —
termsfield bekleyen 3 legacy endpoint için FE-only bypass - 2026-04-15-responsive-component-contract —
responsive/components/lead-form-modal.blade.phpAlpine state’i bu pattern’i kullanır