Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在MVC中获取$\u获取参数_Php_.htaccess - Fatal编程技术网

Php 如何在MVC中获取$\u获取参数

Php 如何在MVC中获取$\u获取参数,php,.htaccess,Php,.htaccess,伙计们,请提前为我的英语复习。有一个MVC框架,在上面做一个网站。 .htaccess文件: AddDefaultCharset utf-8 Options +FollowSymLinks RewriteEngine on RewriteBase / ErrorDocument 404 /404.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ inde

伙计们,请提前为我的英语复习。有一个MVC框架,在上面做一个网站。 .htaccess文件:

AddDefaultCharset utf-8

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
ErrorDocument 404 /404.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ index.php
Router.php:

 class Router
{

    private $routes;

    public function __construct()
    {
        $routesPath = ROOT.'/config/routes.php';
        $this->routes = include($routesPath);
    }

// Return type

    private function getURI()
    {
        if (!empty($_SERVER['REQUEST_URI'])) {
        return trim($_SERVER['REQUEST_URI'], '/');
        }
    }

    public function run()
    {
        $uri = $this->getURI();

        foreach ($this->routes as $uriPattern => $path) {

            if(preg_match("~$uriPattern~", $uri)) {


                $internalRoute = preg_replace("~$uriPattern~", $path, $uri);

                $segments = explode('/', $internalRoute);

                //Search name for controller we need
                $controllerName = array_shift($segments).'Controller';
                $controllerName = ucfirst($controllerName);

                //Находим название action
                $actionName = 'action'.ucfirst((array_shift($segments)));

                $parameters = $segments;
                $controllerFile = ROOT . '/controllers/' .$controllerName. '.php';
                if (file_exists($controllerFile)) {
                    include_once($controllerFile);
                }
                $controllerObject = new $controllerName;
                $result = call_user_func_array(array($controllerObject, $actionName), $parameters);
                if ($result != null) {
                    break;
                }
            }
        }
    }
}
routes.php(控制器和路由的数组)


我认为您可以更改
路由器::getURI()
以在返回查询字符串之前去掉任何查询字符串。未经测试,但大致如下:

private function getURI()
{
    $uri = '';

    if (!empty($_SERVER['REQUEST_URI'])) {
        $uri = $_SERVER['REQUEST_URI'];
    }

    if (($cutoff = strpos($uri, '?')) !== false) {
        $uri = substr($uri, 0, $cutoff);
    }

    return trim($uri, '/');
}
private function getURI()
{
    $uri = '';

    if (!empty($_SERVER['REQUEST_URI'])) {
        $uri = $_SERVER['REQUEST_URI'];
    }

    if (($cutoff = strpos($uri, '?')) !== false) {
        $uri = substr($uri, 0, $cutoff);
    }

    return trim($uri, '/');
}