首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用动态调用的控制器动态调用函数?

如何使用动态调用的控制器动态调用函数?
EN

Stack Overflow用户
提问于 2018-01-28 18:37:51
回答 1查看 304关注 0票数 1

我正试图通过实现一个动态路由器来填充我的迷你网站,所以我做了以下工作

代码语言:javascript
复制
<?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中找不到类‘

EN

回答 1

Stack Overflow用户

发布于 2018-01-28 19:27:24

Yo应该真正使用控制器的完整路径,如果您想要php来解释类名;

这方面的İnsted:

代码语言:javascript
复制
$controller = new $controllerName();

用这个:

代码语言:javascript
复制
$controller = new "App\Controller\PostController";

如果您曾经使用过laravel,您可能会注意到,在larevels线路中,控制器是由全类名称指定的。ie:

代码语言:javascript
复制
Route::get('/myIndexPage', 'Namespace1\Namespace2\MyController@index');

因此,按照同样的原则,您最好遵循一个约定,在同一个命名空间中定义控制器,这样您就可以这样做:

代码语言:javascript
复制
$controller = new "App\Controllers\$controllerName";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48489962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档