Php 从加载程序调用控制器的各种方法
我正在尝试构建一个加载器,以在控制器中加载各种控制器及其方法(根据需要)。我在我的主控制器上草拟了一个简单的代码来调用LeftController(现在是一个虚拟控制器,但我打算将此控制器用作菜单) 这在HomeController中起作用。它加载LeftController控制器并显示方法索引() 基于以上代码的加载程序,这就是我到目前为止所做的Php 从加载程序调用控制器的各种方法,php,oop,model-view-controller,controller,loader,Php,Oop,Model View Controller,Controller,Loader,我正在尝试构建一个加载器,以在控制器中加载各种控制器及其方法(根据需要)。我在我的主控制器上草拟了一个简单的代码来调用LeftController(现在是一个虚拟控制器,但我打算将此控制器用作菜单) 这在HomeController中起作用。它加载LeftController控制器并显示方法索引() 基于以上代码的加载程序,这就是我到目前为止所做的 class Loader { public function controller($controller) {
class Loader
{
public function controller($controller)
{
$file = 'controller/' . $controller . '.php';
$class = $controller;
if (file_exists($file)) {
require($file); // require 'controller/LeftController.php';
$controller = new $class(); //$LeftController = new LeftController();
var_dump($controller);
}
}
}
这也起作用,控制器被实例化。我使用var_dump()看到结果
现在,我需要调用该方法,正如我们在最上面的代码$LeftController->index()中看到的那样代码>但是这次在Loader类上
一种方法是在$controller=new$class()之后添加$controller->index()
代码>但这将始终调用控制器的index()方法
如何将此方法部分编码为可以调用与控制器关联的任何方法,而不仅仅是index()。您可以将方法参数传递给控制器:
public function controller($controller, $method)
然后在新创建的对象上调用它:
$controller->$method()
但是
看来你在试图重新发明轮子。用于验证某个文件是否存在、是否包含该文件并实例化该类的部分称为
代码可能如下所示:
public function controller($controller, $method)
{
$instance = new $controller();
return $instance->$method();
}
而自动加载部分则利用来管理查找和包含文件
函数的作用是:注册任意数量的自动加载器,使类和接口在当前未定义时能够自动加载
因此,您可以使用已有的代码,并从实例化类的操作中将其抽象出来:
spl_autoload_register(function autoloader($controller) {
$file = 'controller/' . $controller . '.php';
if (file_exists($file)) { require($file); }
});
这太宽了。
spl_autoload_register(function autoloader($controller) {
$file = 'controller/' . $controller . '.php';
if (file_exists($file)) { require($file); }
});