Вызов различных методов контроллера из загрузчика

Я пытаюсь построить загрузчик для загрузки различных контроллеров с их методами (по мере необходимости) в контроллере. Я набросал простой код на своем домашнем контроллере для вызова LeftController (теперь это фиктивный контроллер, но я собираюсь использовать этот контроллер в качестве меню).

require 'controller/LeftController.php';
$LeftController = new LeftController();
$LeftController->index();

Это работает в HomeController. Он загружает контроллер LeftController и отображает метод index ().

Основываясь на моем загрузчике на приведенном выше коде, это то, что я делал до сих пор

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->index() сразу после $controller = new $class(); но это всегда будет вызывать метод index () контроллера.

Как мне кодировать эту часть метода так, чтобы я мог вызывать любой метод, связанный с контроллером, а не только index ().

-1

Решение

Вы можете передать аргумент метода с вашим контроллером:

public function controller($controller, $method)

и затем вызовите его на вновь созданном объекте:

$controller->$method()

тем не мение,

кажется, вы пытаетесь изобрести колесо. Часть, в которой вы проверяете, существуют ли файлы, включаете ли вы их и создаете экземпляр класса, называется самозарядные.

Код может выглядеть так:

public function controller($controller, $method)
{
$instance = new $controller();
return $instance->$method();
}

В то время как автозагрузка использует spl_autoload_register() управлять поиском и включением файлов.

Функция spl_autoload_register () регистрирует любое количество автозагрузчиков, позволяя автоматически загружать классы и интерфейсы, если они в данный момент не определены.

Таким образом, вы можете использовать уже имеющийся код и абстрагировать его от действия по созданию экземпляра класса:

spl_autoload_register(function autoloader($controller) {
$file = 'controller/' . $controller . '.php';
if (file_exists($file)) { require($file); }
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]