PHP MVC Kontrolörler url rewrite tarafından uygulanmaktadır?

5 Cevap php

The controller in a Java EE application may be represented by a servlet, which may be currently implemented using JavaServer Faces (JSF).

Ama PHP orada böyle bir servlet, bu yüzden url rewrite tarafından uygulanan sanırım?

Her isteği bu denetleyiciye yönlendirilir böylece?

5 Cevap

Bu mod_rewrite ile yapılabilir ama çoğunlukla php tek bir dosya üzerinden kontrol etmez bir ön-denetleyici mekanizmasi var. Bu şekilde, tüm kontrolörler url belirtilir. See this for more explanation about controllers and mvc in php.

Ben o Ön Kontrol deseni http://en.wikipedia.org/wiki/Front_controller denir ve genellikle phisically Varolmayan dosyalar için herhangi bir istekleri daha sonra ne yapmaya karar hangi index.php yönlendirilir mod_rewrite kuralları yoluyla elde edilir düşünüyorum.

PHP MVC tipik uygulama içine tek giriş noktası olarak gören bir ön denetleyicisi, kullanımı yapar.

Bu genellikle önyükleme kodu içeren bir php dosyasına tüm isteklerini işaret mod_rewrite kullanılarak uygulanır.

Bu önyükleme kodu ön denetleyicisi içerir.

Ön kontrolörü uygun denetleyiciye girdi parametrelerine dayalı isteği yönlendirerek, oradan alır. Sizin hedef denetleyici genellikle parametrelerden biri olarak belirtilir.

Yani, vurduğunuzda:

http://yourdomain.com/blog/new

Uygulama 'blog' talep kontrolör, 'yeni' eylem demek için bu girişi yorumlamak olacaktır ön denetleyicisi, ile önyükleme kodu isteği yönlendirme olur. Daha sonra, 'blog' controller örneğini 'yeni' eylem geçmek, ve kalanı standart MVC olduğunu olacaktır.

Diğer cevapların çoğu görüldüğü gibi, genellikle mod_rewrite bunu yapmak için bir yoldur. Eğer mod_rewrite kullanmak istemiyorsanız Ama, sizin önyükleme dosyası aslında URL kendisinden değişkenleri yapılandırmak sağlayabilirsiniz.

Ben bu yüzden, bir URL'den bir dizi oluşturur kendi işlevlerinin bir çift kullanın:

site.com/page/welcome/param1/param2

olur

$url[0] = 'page'
$url[1] = 'welcome'
$url[2] = 'param1'
$url[3] = 'param2'

ve sonra benim Router $ url dizisi iletebilir ve Kontrol / Aksiyon / Param çağrı parçaları her element ait olduğu karar verir.

Yukarıda gösterilen aynı URL isteği Kontrolörü / Aksiyon / Param çağrısı oluşturur:

// http request for site.com/page/welcome/param1/param2
$controller = new Page_Controller('param1', 'param2');
$controller->welcomeAction();

iken, benim Router nesne ayarlarına bağlı olarak, ben böyle 'admin /' çağrıları gibi alt dizinler oluşturabilirsiniz:

// http request for site.com/admin/page/welcome/param1/param2
$controller = new Admin_Page_Controller('param1', 'param2');
$controller->welcomeAction();

Url_rewrite ile ben size $ url düzenleyebilirsiniz yani, bu size daha fazla özelleştirmek için olanak sağlar (Bazı çerçeveler de çok emin değilim, bunu yapmak isteyebilirsiniz) olarak, ve benim yöntemi ile bu yönlendirme eklemek için zor (hala mümkün olsa) olacağını düşünüyorum dizi Router nesneye geçirmeden önce gerekirse.

Ben negatifleri bu yöntemi kullanarak ne emin değilim, ama bu benim için oldukça iyi çalışıyor!

Sen index.php dosyasına her şeyi yönlendirmek için mod_rewrite kullanmak istiyveyasunuz. Bunu istiyveyasanız Yani mod_rewrite kullanımı:

http://example.com/page/welcome

olup

http://example.com/index.php?page/welcome

veya

http://example.com/index.php?controller=page&action=welcome