Вот как я вызываю контроллеры везде, где они нужны.
$file = 'App/Controller/' . $controller . '.php';
if (is_file($file)) {
include_once($file);
$namespace = 'App\Controller\\';
$relative_controller = $namespace . $controller;
$relative_controller = new $relative_controller();
if (is_callable(array($relative_controller, 'index'))) {
return call_user_func(array($relative_controller, 'index'));
} else {
echo 'Function not callable';
}
} else {
echo 'file missing';
}
Все мои контроллеры / классы имеют пространство имен , определенное, как вы можете видеть в приведенном выше коде в строке 4, где он говорит $namespace = 'App\Controller\\'
, и мне только нужно было передать имя контроллера (HomeController, AboutController, UserController), чтобы вызвать их, это работает хорошо.
В последнее время становится громоздко, когда все контроллеры (больше и все больше контроллеров выскакивает) в одном каталоге, поэтому я решил переместить их в подкаталоги, такие как
App/Controller/Information
App/Controller/User
, но если я начну перемещать эти контроллеры в соответствующие каталоги, пространство имен также изменится. Теперь каждый контроллер будет иметь свое имя подкаталога в своем пространстве имен (в отличие от всех, имеющих одно и то же пространство имен «App \ Controller»).
Как теперь динамически включать пространство имен в загрузчик (код выше), где ранее это было только одно пространство имен, выполняющее всю работу?
Если я переместу информацию о нас, свяжитесь с нами, контроллером политики в разделе 'App/Controller/Information'
, пространство имен изменится с App \ Controller на App \ Controller \ информация .