Php неправильно выбирает строку запроса как массив _GET в Windows 10 - PullRequest
1 голос
/ 18 апреля 2019

Я тестирую некоторые коды из видеороликов курса Laracasts (специалист по PHP). Обычно коды должны получать строку запроса (часть после uri) в виде массива и вводить ее в переменную массива _GET. Но в этом случае он получает URI. Интересно, что в Linux все нормально.

Коды следующие:

файл index.php

<?php

require 'core/bootstrap.php';

require Router::load('routes.php')->direct(Request::uri());

Router.php file

<?php

class Router
{

    protected $routes=[];

    public static function load($file)
    {
        $router=new static;

        require $file;

        return $router;
}

    public function define($routes)
    {
        $this->routes=$routes;
    }

    public function direct($uri)
    {
        if(array_key_exists($uri, $this->routes))
        {
            return $this->routes[$uri];
        }

        throw new Exception('No route defined for this URI.');
    }
}

Файл Request.php

<?php

class Request
{
    public static function uri()
    {
        return trim(
            parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/'
        );
    }
}

index.view.php file

<h1>Submit your name</h1>
    <form action="names" method="get">
        <input type="text" name="name">
        <input type="submit">
</form>

надстройка name.php

<?php

die(var_dump($_GET));

В Windows результат:

array(1) { ["url"]=> string(6) "/names" }

содержимое файла rout.php:

$router->define([ ''=>'controllers/index.php',                 
    'about'=>'controllers/about.php',
    'about/culture'=>'controllers/about-culture.php', 
    'contact'=>'controllers/contact.php',
    'names'=>'controllers/add-name.php' ]);
...