Я пишу структуру микро MVC, и я хочу иметь возможность запускать функцию на основе действия в указанном URL-адресе. Я сейчас занимаюсь:Вызвать функцию, основанную на переменной в родительском контроллере
function action($id, $function){
${$id}->{$function}();
}
Где $ id - модель/просмотр/контроллер для загрузки, а функция $ - действие. Это, видимо, работает, но не в MainController. Я бы поставил его в сценарий запуска, который был бы ограниченным, так как я хочу, чтобы люди могли запускать действие изнутри представления, чтобы они могли выполнять разные действия на основе того, что они дают этой функции.
Fatal error: Call to a member function testFunction() on a non-object in /home/cherwell/public_html/scott/develop/simple/system/controllers/MainController.php on line 20
Кто-нибудь знает дорогу вокруг него, чтобы я мог вызвать функцию из дочернего контроллера из MainController?
Cheers!
EDIT: Я сделал работу действий, выполнив:
if($action != false){
${$id}->{$action}();
} else {
include("system/views/".$id.".php");
}
$ ID и $ действия всегда определены, поэтому он прекрасно работает. Единственная проблема у меня есть сейчас, что любые функции должны иметь все глобал (его длинный список):
global $id;
global ${$id};
global $site;
global $start;
global $action;
global $param;
global $helper;
global $model;
, если они нуждаются в каких-либо из них (которые, как они делают, если вам нужно вызвать методы из maincontroller/helper/model) ...
Я не знаю, почему переменные не передаются в функции. Я также объявил класс для соответствующего идентификатора ...
EDIT 2: Пример.
function testFunction(){
global $helper;
$helper->test();
$this->render("home");
}
Works, но когда я удалить глобальный $ помощника; не удается. Даже если у меня есть загрузка глобалов в старте, конструкция дочернего и родительского, она все равно терпит неудачу. Это также происходит для каждой функции (требующей глобальных переменных). Может ли кто-нибудь помочь?