在自己的php框架中管理URL路由

Ste*_*Luv 13 php url frameworks routes

我正在创建一个PHP框架,我有些疑惑......

框架以这种方式获取URL: http:/web.com/site/index

它需要第一个参数来加载controller(site)然后加载特定的动作(index).

如果您已经在基本URL中安装了框架,则可以正常工作,但如果您将其安装在如下的子文件夹中: http://web.com/mysubfolder/controller/action

我的脚本将其解析为controller = mysubfolder和action = controller.

如果你有更多的子文件夹,结果将是最糟糕的.

这是我的路线代码:

Class Route
{
    private $_htaccess = TRUE;
    private $_suffix = ".jsp";

    public function params()
    {
        $url='';

        //nombre del directorio actual del script ejecutandose.
        //basename(dirname($_SERVER['SCRIPT_FILENAME']));

        if($this->_htaccess !== FALSE):
            //no está funcionando bien si está en un subdirectorio web, por ej stynat.dyndns.org/subdir/
            // muestra el "subdir" como primer parámetro
            $url = $_SERVER['REQUEST_URI'];
            if(isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])):
                $url = str_replace("?" . $_SERVER['QUERY_STRING'], '',$url);
            endif;
        else:
            if(isset($_SERVER['PATH_INFO'])):
                $url = $_SERVER['PATH_INFO'];
            endif;
        endif;

        $url = explode('/',preg_replace('/^(\/)/','',$url));
        var_dump($url);

        var_dump($_GET);

    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你提供的所有帮助.

Kri*_*ian -1

基本上是在第一个斜杠之后获取 url 字符串,然后将其分解为一个数组(我使用“/”作为分隔符)。

然后小心地 array_shift 关闭你的元素并将它们存储为变量

item 0: controller
item 1: the action / method in that controller
item 2 thru n: the remaining array is your params
Run Code Online (Sandbox Code Playgroud)