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
当我点击 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