URL'ler eşleştirmek için bu basit düzenli ifadeler değiştirerek yardıma ihtiyacım var

0 Cevap php

Ben küçük bir MVC çerçevesinde bir yönlendirici nesne inşa ediyorum. It yapılandırılabilir kontrolörleri, eylemler, vb keşfetmek için url dizeleri ayrıştırır.

Şu anda, bir kullanıcı aşağıdaki gibi dizeleri ileterek yolları oluşturabilirsiniz:

$this->connect('/:controller/:action/*');
$this->connect('/:controller', array('action' => 'index'));
$this->connect('/', array('controller' => 'static_pages', 'action' => 'index'));

Ve yönlendirici olanlardan, aşağıdaki normal ifadeler oluşturur:

#^(.*)/(.*)/?.*/?$#
#^(.*)/?$#
#^/$#

Son olarak, yönlendirici bir url dayalı doğru rotayı seçmek için çalışır. Yukarıdaki yolları için adresler bu gibi bir şey olacaktır:

/cars/get_colors/  # will invoke cars->get_colors();
/cars/             # will invoke cars->index();
/                  # will invoke static_pages->index();

However

Benim düzenli ifadeler doğru değildir. İlk (daha spesifik) ifadesi ikinci koşulu maç ve ikinci bir ilk maç olabilir.

Ben tersten kontrol etmek için sipariş çevirmek durumunda, statik sayfalar Rota denetleyici endeksi yol işleri, çalışır, ancak kontrolör endeksi hezimet daha özel olanları tüm yakalar!

Update

Kullanıcı da bu gibi yolları bağlayabilirsiniz çünkü ben normal ifadeler kullanıyorum:

$this->connect('/car/:action/*', array('controller' => 'cars');
$this->connect('/crazy/url/:controller/:action/*');

Bu benzer iki regex inşa edecek:

#^car/(.*)/?.*/?$#
#^crazy/url/(.*)/(.*)/?.*?$#

Son olarak, aşağıdaki yönlendirme yaparak:

/car/get_colors/             # will invoke cars->get_colors();
/crazy/url/cars/get_colors/  # will invoke cars->get_colors();

0 Cevap