Bağlantı ve Rota Kurma
Adresler bir rota anahtarından üretilir, asla elle yazılmaz; çünkü her rota çevrilir ve panel dizini sabit değildir.
Genel Bakış
Rota anahtarı bir addır; ürettiği adres dile ve kuruluma bağlıdır. Sabit bir yol tek bir dilde çalışır, diğerlerinde 404 verir. Admin dizinini sabit yazan bir panel bağlantısı ise o dizini yeniden adlandırmış her kurulumda kırılır.
Dört statik metot bütün durumları karşılar; hepsi coremio/classes/LinkGenerator.php içindedir.
Referans
public static function admin($route = '', $params = [], $lang = '', $wqs = []): string|bool;
public static function client($route = '', $params = [], $lang = '');
public static function wQS(null|string|bool $url, string|array $params = []): string;
public static function convert_to_link(string $arg): string;
wQS() ile sarın.
? ile & arasında kendisi seçim yapar. İkinci argüman pratikte dizi olmak zorundadır.
pages/12 gibi saklanmış bir referansı tam adrese çözer. Bir menü öğesini ya da editör bağlantısını taşınabilir kılan budur. Sonuçlar istek ve dil başına bellekte tutulur.
Dört Argüman
| Sıra | Argüman | Ne olmalı |
|---|---|---|
| 1 | $route | Rota tablosundan bir anahtar, yol değil. Bilinmeyen anahtar reddedilmez, olduğu gibi adresin içine yapıştırılır. |
| 2 | $params | Sıralı yol parçaları. Her değer anahtarın desenindeki sıradaki (?) yerine geçer; artanlar sessizce düşer. Dizi olmayan bir değer tek elemanlı listeye sarılır. |
| 3 | $lang | '' hizmet edilen dili kullanır. tr gibi bir kod o dili zorlar, düz none değeri ise hiç dil parçası taşımayan bir adres üretir. |
| 4 | $wqs | İlişkisel dizi olarak sorgu dizesi; yalnız boş değilse uygulanır. Sadece admin() üzerinde vardır. |
Rota Anahtarı Parça Sayısını Kendi Taşır
Yönlendirici parametre başına bir (?) doldurur ve durur. Deseninde yer tutucu olmayan bir anahtar geçtiğiniz her parametreyi yok sayar. Liste ile detay adresinin tek anahtar artı argüman değil, iki ayrı anahtar olmasının sebebi budur.
// coremio/locale/tr/admin-routes.php - anahtar => [adres deseni, controller rotası]
return ['admin-routes' => [
'services' => ['services', 'services'],
'services-1' => ['services/(?)', 'services/(1)'],
'services-2' => ['services/(?)/(?)', 'services/(1)/(2)'],
]];
// LinkGenerator::admin("services", ["detail", 5]) -> /services iki değer de düştü
// LinkGenerator::admin("services-1", ["detail"]) -> /services/detail
// LinkGenerator::admin("services-2", ["detail", 5]) -> /services/detail/5
convert_to_link Neyi Kabul Eder
| Biçim | Örnek | Şuna çözülür |
|---|---|---|
| Site sayfası anahtarı | home, contact, basket | O site rotasının aktif dildeki adresi. |
| Müşteri paneli anahtarı | ca-invoices, ca-domains, ca-tickets | O müşteri paneli rotası. |
| Kayıt referansı | pages/12, products/48, kbase-page/7 | Kaydın detay adresi; çevrilmiş kısa adından bulunur. |
| Kategori referansı | category/25 | Kategorinin kendi tipine göre katalog, makale, referans ya da bilgi bankası listesi. |
| Ürün grubu | product-group/hosting | O grubun katalog sayfası. |
| Başka her şey | whatever | # dizesi; böylece bozuk referans hata değil ölü bağlantı olarak görünür. |
Örnek
// Liste sayfası: parametre yok, sorgu dizesi yok.
$list = LinkGenerator::admin("services");
// Detay sayfası. Kayıt id'si sorgu dizesiyle gider, yani dördüncü argüman
// kullanılır ve üçüncüsü boş kalır.
$detail = LinkGenerator::admin("services-1", ["detail"], '', ['id' => $serviceId]);
// Aynı sayfa, belirli bir sekmede açılarak.
$tab = LinkGenerator::admin("services-1", ["detail"], '', ['id' => $serviceId, 'tab' => "invoices"]);
// Alternatif dil etiketi için tek bir dile zorlanmış site adresi.
$signIn = LinkGenerator::client("sign-in", [], "tr");
// client() sorgu dizesi argümanı taşımaz, bu yüzden sarılır.
$paged = LinkGenerator::wQS(LinkGenerator::client("services"), ['page' => 2]);
// Menü satırındaki saklı referans, render anında çözülür.
$href = LinkGenerator::convert_to_link($row["page"]); // "pages/12" -> /hakkimizda
// Kaydın ikinci elemanı, adresin geri eşlendiği controller rotasıdır; kodun
// yolu değil anahtarı bilmesine izin verilmesinin sebebi budur:
//
// 'services-1' => ['services/(?)', 'services/(1)']
// ^ LinkGenerator ^ yönlendirici okur ve
// yazar services::page_detail() çağırır
class Services extends Controllers
{
public function page_detail(): void
{
$id = (int) Filter::init("GET/id", "rnumbers");
$this->addData("back", LinkGenerator::admin("services"));
}
}
Tuzaklar
LinkGenerator::admin("services-1", ["detail"], ['id' => 5]) yazmak diziyi dil kodunun yerine koyar. Hiçbir şey fırlatılmaz. Bir Array to string conversion uyarısı ve /Array/{admin}/services/detail adresi alırsınız. Yol parçaları yine çözülür, göndermek istediğiniz id ise hiçbir yerde yoktur. Dil için '' geçin, sorgu dizesini dördüncü sırada tutun.
Yönlendirici, tabloda bulamadığı anahtarı olduğu gibi döndürür. Bir yazım hatası, hatanın yapıldığı yerde bir istisna değil, 404 veren makul görünüşlü bir adres üretir. Anahtar var ama yer tutucusu geçtiğiniz parametrelerden az olduğunda da aynısı olur; orada fazla değerler doğrudan yok olur.
İkinci argümanın bildirilen tipi string'e izin verir, ama değer http_build_query() fonksiyonuna gider. O da dizi ya da nesne olmayan her şeyi TypeError ile reddeder. Soru işaretini elle birleştirmeyin de: üretilen adres zaten parametre taşıyor olabilir ve ikinci bir soru işareti üretirsiniz.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.