İstek Parametreleri
Bu dokümantasyon, Serenay\B2B\Helpers\Request sınıfının Twig şablonlarına request global değişkeni olarak sunduğu alanları ve metodları içerir.
Class Path: application/src/Helpers/Request.php
Diğer *-data-attributes.md dosyalarındaki (Product, Order, Category, Brand) nesnelerden farkı: Request bir BaseData/veritabanı satırı değildir, statik bir yardımcı sınıftır ve anlık HTTP isteğinin bilgilerini tutar.
request Değişkeninin İki Farklı Şekli
| Bağlam | Kaynak | Twig'de tip | Not |
|---|---|---|---|
| Ana tema ve Twig widget şablonları | SerTwig::getGlobals() → 'request' => request() | dizi (array) | application/src/Repo/SerTwig.php:49; Twig ile render edilen widget'lar da bu global'i görür |
PHP View tipi widget | — | — | request değişkeni view'e aktarılmaz; PHP tarafında request($key) ile okunur |
Widget "Gösterim Koşulu" (show_if) ifadesi | checkIsShow() (Widget, ProductList, ProductListCarousel) → Symfony ExpressionLanguage | stdClass (Request::all_object()) | request.page_type == 'product' gibi koşullarda kullanılır; Twig {{ }} sözdizimi DEĞİL |
| PHP tarafı (controller/widget) | request($key) / request($key, $value) global fonksiyonu | — | application/src/HelperFunctions/ui_helper.php:443 |
Request::all_object() yalnızca show_if değerlendirmesinde kullanılır; Twig şablonlarına giden request her zaman request()'in döndürdüğü dizidir. Twig'de dizi elemanına . ile erişilir (request.page_type).
Tüm İstek Özellikleri
🔍
- 🧾 Alanlar
- 📄 page_type Değerleri
- ⚙️ Public Metodlar
| Alan Adı | Arama Kelimeleri | Tip | Açıklama | Twig Kullanımı |
|---|---|---|---|---|
design_mode | tasarım modu, design mode, builder | bool | Admin görsel düzenleyicide (admin/Builder::index) true'ya set edilir; widget'ların show_if kontrolünü atlamasını sağlar | {% if request.design_mode %} |
host | host, alan adı, domain | string | $_SERVER['HTTP_HOST'] | {{ request.host }} |
locale | dil, locale, language | string | $_SERVER['HTTP_ACCEPT_LANGUAGE'], yoksa get_lang() | {{ request.locale }} |
origin | origin, kaynak | string | $_SERVER['HTTP_ORIGIN'] | {{ request.origin }} |
page_type | sayfa tipi, page type | string|null | Sayfa tipi (product, category, index, ...) | {{ request.page_type }} |
path | yol, path, url | string | $_SERVER['REQUEST_URI'] | {{ request.path }} |
visual_preview_mode | görsel önizleme, preview mode | bool | Tanımlı ama kod tabanında hiçbir yerde true set edilmiyor; şu an her zaman false | {% if request.visual_preview_mode %} |
is_mobile | mobil mi, is mobile | bool | is_mobile() yardımcı fonksiyonu | {% if request.is_mobile %} |
method | metod, method, http method | string | $_SERVER['REQUEST_METHOD'] | {{ request.method }} |
query | query, get, sorgu parametresi | array | $_GET | {{ request.query.sayfa }} |
form | form, post | array | $_POST | {{ request.form.email }} |
payload | payload, json body, gövde | array|string|int|float|bool|null | php://input içeriğinin json_decode(..., true) sonucu; JSON nesne/dizi ise array, skaler ise ilgili skaler tip, boş/geçersiz gövdede null | {{ request.payload.key }} |
page_type dışındaki alanların çoğu koda hiçbir yerde set() ile açıkça yazılmaz; ilk okunduklarında resolve() üzerinden lazy hesaplanır ve Request::$properties içinde istek boyunca önbelleğe alınır (bkz. Public Metodlar).
page_type, yalnızca ilgili controller'ın açıkça request('page_type', '...') çağırdığı sayfalarda doludur. Çağrılmayan bir sayfada resolve() bu alanı ham $_SERVER['REQUEST_URI'] değerine düşürür — yani path ile aynı, URL biçiminde bir değer olur.
| Değer | Arama Kelimeleri | Controller |
|---|---|---|
index | anasayfa, index | Site::index |
product | ürün, product, detay | Urunler (ürün detay, benzer ürün listesi hariç) |
category | kategori, category | Urunler (kategori listesi) |
search | arama, search | Urunler (arama sonuçları) |
brand | marka, brand | Urunler (marka detay listesi) |
brand_list | marka listesi, brand list | Brands::index |
similar_products | benzer ürünler, similar products | Urunler |
favorites | favoriler, favorites | Urunler |
all_products | tüm ürünler, all products | Urunler |
bulk_list | toplu liste, bulk list | Urunler |
group | grup, group | Urunler |
collection | koleksiyon, collection | Urunler |
discounted | indirimli, discounted | Urunler |
login | giriş, login | Uye::giris |
register | kayıt, register | Uye::kayit |
| Metod | Arama Kelimeleri | Parametreler | Dönüş | Açıklama |
|---|---|---|---|---|
Request::set($key, $value) | set, yaz | string, mixed | void | Bir alanı elle yazar (request('key', $deger) bunu çağırır) |
Request::get($key) | get, oku | string | mixed | Alanı döner; değer null ise önce resolve() ile hesaplayıp önbelleğe yazar |
Request::all() | all, tüm alanlar | - | array | Tüm alanları çözüp dizi olarak döner — Twig request global'ine enjekte edilen budur |
Request::all_object() | all object, stdclass | - | object | all() çıktısının stdClass hali — yalnızca widget show_if ifadelerinin değerlendirilmesinde kullanılır |
Request::ip() | ip, istemci ip | - | string | İstemci IP'sini Cloudflare başlığı → güvenilen proxy X-Forwarded-For zinciri → REMOTE_ADDR sırasıyla çözer |
Request::isCrawler() | crawler, bot | - | bool | User-Agent crawler mi? (CrawlerDetect, istek başına önbellekli) |
Request::getUserAgent() | user agent, tarayıcı | - | string|null | Ham User-Agent değeri |
Request::isValidVisitorForAnalytics() | analitik, geçerli ziyaretçi | - | bool | Crawler/olası bot değilse true (mobil uygulama User-Agent'i crawler sayılmaz) |
Request::hasStableVisitorIdentity() | kimlik, visitor identity | - | bool | Ziyaretçi kimliği çerez/oturumla sabitlenmiş mi? |
Request::resetVisitorDetection() | reset, sıfırla, test | - | void | Yalnızca testler arası crawler/bot önbelleğini sıfırlar |
ip(), isCrawler(), getUserAgent(), isValidVisitorForAnalytics(), hasStableVisitorIdentity() Request::$properties dizisine dahil değildir — yani request.ip gibi bir Twig erişimi çalışmaz, bu metodlar yalnızca PHP tarafından çağrılır.
PHP Kullanım Örnekleri
// Sayfa tipini bildir (controller)
request('page_type', 'product');
// Değeri oku
$type = request('page_type');
// Tüm alanları dizi olarak al
$all = request();
// İstemci IP'si (analytics/rate-limit)
$ip = \Serenay\B2B\Helpers\Request::ip();
Twig Kullanım Örnekleri
Sayfa tipine göre koşullu render (breadcrumb.twig.php)
{% if theme_config('category_show_breadcrumb') and request.page_type == 'category' and kategori %}
...
{% endif %}
Sepete ekle formunda gizli alan (add_to_cart.twig.php)
<input type="hidden" name="page_type" value="{{ request.page_type }}"/>
Widget gösterim koşulu (Builder "Gösterim Koşulu" alanı)
request.page_type == 'index' or request.is_mobile
Önemli Notlar
Twig şablonlarında (ana tema ve Twig widget'ları) request bir dizidir; yalnızca widget show_if ifadelerinde stdClass'tır (Request::all_object()). İkisinde de . erişimi çalışır; hiçbirinde metod çağrılamaz. PHP View tipi widget'a request hiç aktarılmaz, orada request($key) fonksiyonu kullanılır.
Yalnızca yukarıdaki tabloda listelenen controller'lar bu alanı set eder; başka bir sayfada request.page_type ham REQUEST_URI değerine düşer.
- Veritabanı satırı değil:
Request,BaseData'dan türemez;getFields(),save()gibi Data-katmanı metodları yoktur. visual_preview_modeşu an ölü alan: Varsayılanfalse'un hiçbir yerdetrue'ya çevrilmediği doğrulandı; yeni bir kullanım eklenene kadar bu alanı koşulsuzfalsekabul edin.- Lazy + istek-başı önbellek:
Request::get()bir alanı yalnızca ilk okunduğundaresolve()ile hesaplar ve$propertiesdizisinde tutar; aynı istek içinde tekrar okumak$_SERVER/$_GETgibi kaynaklara tekrar gitmez. Request::ip()güvenlik notu:X-Forwarded-Forzinciri yalnızca istekDEFAULT_TRUSTED_PROXIES(loopback) veyaTRUSTED_PROXY_IPSortam değişkeniyle bildirilen bir proxy'nin arkasından geliyorsa dikkate alınır; aksi halde doğrudanREMOTE_ADDRdöner.
Kaynaklar
İletişim ve Destek
Herhangi bir sorunla karşılaşırsanız veya yardıma ihtiyaç duyarsanız, destek ekibimizle iletişime geçebilirsiniz.