我正在测试Laracasts课程视频(PHP练习者)中的一些代码。通常,代码必须获取查询字符串(uri后的部分)作为数组,并将其输入到_GET数组变量中。但在这种情况下,它会获取uri。有趣的是,在Linux上一切正常。
代码如下:
index.php文件
<?php
require 'core/bootstrap.php';
require Router::load('routes.php')->direct(Request::uri());
Router.php文件
<?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文件
<h1>Submit your name</h1>
<form action="names" method="get">
<input type="text" name="name">
<input type="submit">
</form>
add-name.php
<?php
die(var_dump($_GET));
在Windows上,结果是:
array(1) { ["url"]=> string(6) "/names" }
routes.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' ]);
最后我找到了问题。错误的 .htaccess 文件内容导致了此问题。谢谢大家。