Php路由不会改变浏览器栏中的效果

时间:2017-09-18 16:19:05

标签: php class routes

这是我的主要索引文件我希望当我在浏览器中写一下它加载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'], '/');
  }
}
 ?>

1 个答案:

答案 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")