如何使用区分大小写的MVC PHP?

时间:2014-03-26 03:24:08

标签: php url-routing

我正在用PHP创建网站。我在PHP中使用MVC。我的网站是这样的,如果用户转到example.com/about然后它将加载关于class和index()函数。如果用户将转到localhost / about / founder,那么它将从About类加载founder()函数。但问题是,如果我转到localhost / About或localhost / AbOut或类似的东西,它将从About类文件加载默认的index()函数。那么如何处理区分大小写呢?我的意思是我希望我的脚本从类文件加载index()函数,如果它是localhost / about或localhost / terms。如果任何东西都是大写的,那么它应该加载404错误函数。 404错误功能已在我的网站中设置。

请帮帮我朋友。

这是我的Bootstrap.php类文件

<?php

/* 
    Bootstrap class to run functions by URL
*/

class Bootstrap {

    public $_req;
    public $_body;
    public $_file;
    public $_error;

    function __construct(){
        if(empty($_GET['req'])){
            require 'classes/home.php';
            $this->_body = new Home();

            $this->hdr($this->_body->head());
            $this->_body->index();
            $this->ftr();
            exit();
            }

            $this->_req = rtrim($_GET['req'], '/');
            $this->_req = explode('/', $this->_req );

            $_file = 'classes/'.$this->_req[0].'.php';

            if(file_exists($_file)){
                require $_file;
            }
            else {
                $this->error(404);
                 }

            $this->_body = new $this->_req[0];
            $this->hdr($this->_body->head());


            if(isset($this->_req[2])){
                if(method_exists($this->_req[0], $this->_req[1])){
                    $this->_body->{$this->_req[1]}($this->_req[2]);
                    }else {
                    $this->error(404);
                    }
            }else {
                if(isset($this->_req[1])){
                    if(method_exists($this->_req[0], $this->_req[1])){
                        $this->_body->{$this->_req[1]}();
                        }else {
                        $this->error(404);
                        }
                }else {
                $this->_body->index();
                }

            $this->ftr();
            }                   
        }

    //this function is to set header in html code
    public function hdr($var = false){
        echo '<!DOCTYPE HTML><html><head>'.$var.'</head><body>';
    }

    //this function is tp set footer in html code
    public function ftr($var = false){
        echo $var.'</body></html>';
    }

    //error handler
    public function error($var){
        require 'classes/er_pg.php';
        $this->_error = new Error();
        $this->_error->index($var);

        }
}

2 个答案:

答案 0 :(得分:0)

由于内容重复,您不应该使用任何内容来加载非小写的URL,这是您正在做的一件好事。在这种情况下,错误的URL会自动失败。

但是,由于你没有显示你是如何进行这些调用的,所以我现在只能建议检查被调用的方法是否存在(区分大小写),如果不存在,则抛出/重定向到404页面(header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");)。


更新

在评论中的所有聊天之后,似乎file_exists在您的情况下不区分大小写,这真的很奇怪。希望有人能够弄明白,所以我可以删除它(保留它,因为评论中的信息)。

答案 1 :(得分:0)

我解决了这个问题。我用过这个

if(ctype_lower($this->_req[0])){
            $_file = 'classes/'.$this->_req[0].'.php';

现在它的工作。无论如何朋友们。