我正试图通过实现一个动态路由器来填充我的迷你网站,所以我做了以下工作
<?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
我想在控制器listPosts上调用函数PostController.php
(!)致命错误:在第40行PostController的C:\wamp64\www\cleperduv2\index.php中找不到类‘’
发布于 2018-01-28 19:27:24
Yo应该真正使用控制器的完整路径,如果您想要php来解释类名;
这方面的İnsted:
$controller = new $controllerName();用这个:
$controller = new "App\Controller\PostController";如果您曾经使用过laravel,您可能会注意到,在larevels线路中,控制器是由全类名称指定的。ie:
Route::get('/myIndexPage', 'Namespace1\Namespace2\MyController@index');因此,按照同样的原则,您最好遵循一个约定,在同一个命名空间中定义控制器,这样您就可以这样做:
$controller = new "App\Controllers\$controllerName";https://stackoverflow.com/questions/48489962
复制相似问题