这是我的主要索引文件我希望当我在浏览器中写一下它加载about页面但它失败时。
<?php
$database = require 'core/bootstrap.php';
require Router::load('routes.php')
->direct(Request::uri());
?>
这是我的 routes.php文件
<?php
$router->define([
'' => 'controllers/index.php',
'about' => 'controllers/about.php',
'about-culture' => 'controllers/about-culture.php',
'contact' => 'controllers/contact.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 Routes defined for this URL');
}
}
?>
我不知道这里的错误是什么,我尝试了很多并且也观看了教程并完全按照他的方式行事,但我没有显示输出。
require Router::load('routes.php')
->direct(Request::uri());
当我只写开始 localhost:8080 / start / 时(这是我所有文件都存在的文件夹,它给了我这个错误
致命错误:未捕获异常:在C:\ xampp \ htdocs \ start \ core \ Router.php中没有为此URL定义路由:25堆栈跟踪:#0 C:\ xampp \ htdocs \ start \ index .php(8):路由器 - &gt;直接(&#39;开始&#39;)#1 {main}在第25行的C:\ xampp \ htdocs \ start \ core \ Router.php中抛出 < / p>
当我加载页面时,表示找不到对象。
请求类
<?php
class Request
{
public static function uri()
{
return trim($_SERVER['REQUEST_URI'], '/');
}
}
?>
答案 0 :(得分:0)
基本上REQUEST_URI
包含除主机名和协议之外的整个URL,因为start是您的文件夹名称和应用程序的根目录,您必须在启动后获取请求uri
for eg
http://localhost/start/about/
REQUEST_URI = /start/about/
after trimming = start/about
与任何路由器都不匹配。 所以你必须以某种方式将你的基本目录传递给你的函数来修改你的uri函数
class Request
{
public static function uri($base = "")
{
$url = str_replace($base,"",$_SERVER['REQUEST_URI']);
return trim( $url , '/');
}
}
,可以称为Request::uri("start")