Link 由于路由问题无法转到另一个页面?

Link to another page doesn't work due to routing problem?

当我点击 index.php 上的 link 进入 users.php 页面时,我得到的数据与 index.php 上的数据相同,应该有所不同。我到 users.php 的 link 路由很好,我认为问题出在核心控制器 (Core.php) 中,我似乎找不到问题所在。控制器名称也是 UserController,当我将 users.php 的名称更改为 usercontroller.php 并将 href 也更改为 usercontroller 时,它工作正常。这是我的代码:

代码结构:

Project
 |    
 +-- App
 |   |  
 |   +-- Controllers
 |       |
 |       +-- PageController.php
 |       +-- UserController.php  
 |   +-- Libraries
 |       |
 |       +-- Core.php
 |       +-- Controller.php
 |   +-- Views
 |       |
 |       +-- pages
 |           |
 |           +-- users.php
 |           +-- index.php

index.php:

<?php require '../App/Views/includes/header.php' ; ?>
<h1>Homepage!!!</h1>
<a href="users">Users</a>
<?php require '../App/Views/includes/footer.php' ; ?>

PageController.php

<?php
namespace App\Controllers;

use App\Libraries\Controller;

class PageController extends Controller
{
    public function index()
    {
       $this->view('pages/index');
    }
}

UserController.php:

<?php
namespace App\Controllers;

use App\Libraries\Controller;

class UserController extends Controller
{
    public function index()
    {
       $this->view('pages/users');
    }
}

Controller.php:

<?php
namespace App\Libraries;

class Controller
{
    public function model($model)
    {
       require_once '../App/Models/' . $model . '.php';
       return new $model();
    }

    public function view($view, $data = [])
    {
       if (file_exists('../App/Views/' . $view . '.php')) {
        require_once '../App/Views/' . $view . '.php';
       } else {
         die("View does not exist!!!");
       }
    }
 }

Core.php

<?php
namespace App\Libraries;

class Core
{
   protected $currentController = 'App\Controllers\PageController';
   protected $currentMethod = 'index';
   protected $params = [];

   public function __construct()
   {
       $url = $this->getUrl();
       if (file_exists('../App/Controllers/' . ucwords($url[0]). '.php')) {
        $this->currentController = ucwords($url[0]);
          if (isset($url[0])) {
            $this->currentController = '\App\Controllers\' . ucwords($url[0]);
        }
          unset($url[0]);
        }
          $this->currentController = new $this->currentController;

       if (isset($url[1])) {
         if (method_exists($this->currentController, $url[1])) {
            $this->currentMethod = $url[1];
            unset($url[1]);
          }
        }
          $this->params = $url ? array_values($url) : [];
          call_user_func_array([$this->currentController, $this->currentMethod], $this->params);
   }

public function getUrl()
{
    if (isset($_GET['url'])) {
        $url = rtrim($_GET['url'], '/');
        $url = filter_var($url, FILTER_SANITIZE_URL);
        $url = explode('/', $url);
        return $url;
       }
    }
 }

这是因为您现在正在搜索名为 Users 的控制器。您应该将您的控制器名称和文件名从 UserController 更改为 Users 或者您可以将其附加到您的核心 class:

   public function __construct()
   {
       $url = $this->getUrl();
       if (file_exists('../App/Controllers/' . ucwords($url[0]). 'Controller.php')) {
        $this->currentController = ucwords($url[0]);
          if (isset($url[0])) {
            $this->currentController = '\App\Controllers\' . ucwords($url[0]).'Controller';
        ...
    }

现在如果你有 url 例如 /users 你应该将你的控制器命名为 UsersController