Я тестирую некоторые коды из видеороликов курса 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' ]);