PHP URL Yönlendirme

2 Cevap

Ben iyi yolları, benim öğrenme parçası ile, bir yönlendirici yapıyor ve benim yaklaşım çalıştı görmek istiyordu. Ancak bu son zamanlarda beni rahatsız eden, şu anda ben bir ana "yönetici" ekleyerek daha sonra, bir dizi yollar ekleme görüyor.

Yani bu yaklaşıma (sözde örnek) var

<?php 
$paths = array(); 

$paths[] = new routes_object('PATH', 
             array(
                'controller'=> 'controllerName', 
                'action' => 'actionName')); 

$router = new router_manager()->add($paths);

Tüm yolları ilave edildikten sonra, bu demek olur fazla 10 ya da. Benim onlar yineleme ve değişkenleri almak için özü işlemini başlatmak için match () fonksiyonu kontrol ettik neticesinde eğer görmek için.

Bu yaklaşım tamam mı? Bir dizideki nesnelerin bir koleksiyonu olan ve yineleme?

2 Cevap

Tüm yolları ilave edildikten sonra, bu demek olur fazla 10 ya da. Benim onlar yineleme ve değişkenleri almak için özü işlemini başlatmak için match () fonksiyonu kontrol ettik neticesinde eğer görmek için.

Bu bana performansı hakkında endişeleriniz olduğunu düşünmeye yol açar. Yapmak değil.

Bu nesne yönelimli kod yapmanın tamamen geçerli bir yoldur. 10 maddelik bir döngü sizin uygulamaları performans üzerinde belirgin bir etkisi olmamalıdır. Bir nesne nesne yönelimli kodunda not pahalı bir unsurdur. Daha neşeli.

Benim rotalarda regex kullanabilirsiniz.

Yani bir eşleşme bulmak çalışırken yollarının dizi üzerinden sorgu dizesi ve sadece döngü olsun :)

$acs_routerTable = array(
    '/^$/' => 'index_Controller', //default controller
    '/^(authteste|modelteste|formsteste|scafftest|test)/'  => 'index_Controller/$1',  
);

Ve yönlendirici sınıfında bu var:

private function getRoutes($givenroute) {        
    require($this->configData->pathroutes);                

    $newroute = null;

    foreach ($acs_routerTable as $pattern => $value) {
        if (preg_match($pattern,$givenroute,$match)) {    
            $newroute = preg_replace($pattern,$value,$givenroute);                
            return $newroute;      
        }    
    }
    return $givenroute;
}

Bir rota eşleşirse Gördüğünüz gibi sadece verilen rota dönecektir değilse bu yeni rota dönecektir :)