Tür Django gibi PHP URL Yönlendirme,

3 Cevap php

Ben üzerinde çalışıyorum bir MVC framework için bir regex tabanlı yönlendirici inşa etmeye çalışıyorum. Django urls.py içinde adresler ele yolu çok düşkün olduğunu ve benzer bir şey oluşturmak istiyoruz. Herkes benim yönlendirici (bir belirtilmemiş ise veya varsayılan controller) denetleyicisi örneğini 'süreç', yöntemleri çağırır ve argümanlar geçebilir düzenli ifadeler bir dizi oluşturabilirsiniz nasıl herhangi bir kod / örnekler var mı?

Herhangi bir ipucu gerçekten takdir.

3 Cevap

Bu belki de utanmaz self-promosyon, ama ...

PHP Django URL gönderme işlevselliği taklit çalışır (diğer şeyler arasında) bir little framework hangi yazdık. Oldukça (belgeleme şu anda gerçekten çok az) henüz bitmiş değil, ama orada oluyor ... Sen the URL resolver, URL dispatching üzerine wiki makale bulmak ve {[(3)] olabilir } yardımcı ([(4)]} {bakınız).

Diyelim ki düzenli ifadeler ve geri çağrıları arasındaki eşlemeleri içeren bir yapılandırma dosyası var diyelim: Söyledi ile, burada başlamak için küçük bir reçetedir:

<?php
return array(
  '{^blog/(?<year>\d+)/(?<slug>[\w-]+)$}' => array('BlogController', 'post'),
  '{^about$}' => array('AboutController', 'about'),
  // and so on...
);

Bu dizi üzerinde yineleme ve istek URL karşı tuşları maç:

<?php
foreach($urlconf as $pattern => $callback) {
  if (preg_match($pattern, $_SERVER['REQUEST_URI'], $matches) !== false) {
      return dispatch($callback, $matches); // match
  }
}
return handle_404(); // no match

dispatch() function / denetleyici sınıf örneğini ve ve reflection kullanarak yöntemini incelemek olabilir gerekir. Bu, tipik olarak, URL biçimi, söz konusu yöntem parametreleri ile ilgili eşleşen doğrulama içerecektir. Sizinle yöntemi çağırmak için olan argümanlar toplamak gerekir: Varsayılan argüman olarak doldurulması mevcut ise, adında veya pozisyonel maç vs, hangi parametre, karşılık bulmaktan (bir örnek için this code bakın.) Ardından, denetleyicisi yöntemi URL modeli maçtan argümanlar kullanarak çağrılabilir.

Bu yardımcı olur umarım!

EDIT: Tabii ki, mod_rewrite veya $_SERVER['PATH_INFO'] hile aynı .php dosyasına tüm istekleri göndermek için gereklidir. Uygun bir .htaccess dosya bulunabilir here.

Kullanın. Htacess

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

ve daha sonra iç index.php

$url = $_GET['rt'];
$tmp = explode("/", $url);

Eğer denetleyici / eylem almak için $ tmp array_shift olabilir

Ben bLibrary kütüphanesi ile benzer bir şey yaptık. Bu URL PHP sayfadan sonra değerleri almak için tasarlanmıştır. Ben emin değilim nasıl kelime böylece heres nasıl görünüyor

http://www.example.com/page.php/this/is/a/location-here

Komut kullandığı veriler:

/this/is/a/location-here

Peki o zaman bu dize düzenli ifadeleri nasıl kullanacağınızı seçebilir. Ben genellikle sadece explode kullanarak yolları dışında bölünmüş ve bu kullanarak sayfa üzerinde çalışacak.

Kodu burada: hosted on google code