【发布时间】:2018-07-07 11:33:34
【问题描述】:
我正在尝试通过实现动态路由器来改进我的迷你网站,所以我做了以下操作
<?php
use App\Controller\Autoloader;
use App\Controller\PostController;
require_once("controller/Autoloader.php");
Autoloader::register();
$url = $_SERVER['REQUEST_URI'];
$url = explode('/', $url);
array_shift($url);
$base = $url[0];
$url = $url[1];
$page = "";
$function = "";
$controller = "";
$urlArray = array(
'base' => $base,
'page' => $page,
'parameters' => array(
"controller" => $controller,
"function" => $function
)
);
$url = explode("?", $url);
$urlArray["page"] = $url[0];
$url = explode("&", $url[1]);
$urlArray['parameters']['controller'] = str_replace("controller=", "", $url[0]);
$urlArray['parameters']['function'] = str_replace("action=", "", $url[1]);
$controllerName = $urlArray['parameters']['controller'];
$controller = new $controllerName();
$controller->$urlArray['paremeters']['function']();
因为我的网址是 cleperduv2/index.php?controller=PostController&action=listPosts
我想调用控制器 PostController.php 上的函数 listPosts
(!) 致命错误:在第 40 行的 C:\wamp64\www\cleperduv2\index.php 中找不到类“PostController”
【问题讨论】:
-
你在加载
PostController的类吗?为什么不使用框架? -
看起来你的控制器在
App/Controller/PostController,不是吗? -
是的,我的控制器在 App/Controller/PostController 中,只是为了确保我创建的自动加载器使用静态路由器加载所有类(仅包含 if 条件)。非常感谢您的宝贵时间
-
即使我直接设置包含控制器名称的变量(如 $controllerName = "PostController";
标签: php function dynamic controller router