Basit php yönlendirme sorunu

1 Cevap php

Ben yapıyorum benim yeni özel MVC çerçevesi için basit bir yönlendirme sistemi kuruyorum.

Şu anda benim yönlendirici sınıfı gibi URL views:

www.example.com/controller/controller_action/some/other/params

Yani, aslında ... Ben denetleyici yönlendirme için URI ilk iki bölümü rezerve ettik. Ancak, ben sadece aşağıdaki çalıştırmak ne isterseniz?

www.example.com/controller/some/other/params

... Hangi sadece varsayılan denetleyicisi eylem çalıştırmak ve buna ekstra params göndermek girişimi olacak mı?

İşte kullanarak basit bir router im:

    \* --- htaccess --- *\
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

    \* --- index.php --- *\
    if(array_key_exists('rt',$_GET)) {
        $path = $_GET['rt'];
        $uri = explode('/',$this->path);
        if(empty($uri[0])) {
    	$load->ctrl('home');
        }elseif(empty($uri[1])) {
    	$load->ctrl($uri[0]);
        }else{
    	$load->ctrl($uri[0],$uri[1]);
        }
    }else{
        $load->ctrl('index');
    }

    \* --- loader class --- *\
    public function ctrl($ctrl,$action=null) {
        $ctrl_name = 'Ctrl_'.ucfirst(strtolower($ctrl));
        $ctrl_path = ABS_PATH . 'ctrl/' . strtolower($ctrl) . '.php';
        if(file_exists($ctrl_path)) { require_once $ctrl_path;}

        $ctrl = new $ctrl_name();

        is_null($action) ? $action = "__default" : $action = strtolower($action);
        $ctrl->$action();
    }

Herhangi bir yardım / yorum harika olurdu, teşekkürler!

1 Cevap

Eğer denetleyici içinde bu ele verebilir. Istenen bir yöntem mevcut değildir Genellikle, MVC çerçeveler varsayılan bir yöntem arayacak. Sadece istenen yöntemi çağırır ve parametre olarak parametre listesini geçmek için bu dönüş-yöntem üzerine.

Örneğin, KohanaPHP istenen yöntem yok çağrılan __call($method, $params) yöntemi vardır. Sen bu içindeki mantığı, ya da MVC çerçevesinde işlevsel eşdeğerini ele verebilir ..

Bu daha çok, çeşitli dosyalar arasında dışarı püskürdü olan daha denetleyici kendisi iç mantığı devam edelim istiyorum.