Роутер PHP. Вызов методов

160
11 сентября 2018, 04:20

Написал роутер:

class App
{
private $fileOrderManager;
private $pageManager;
private $routes = [
'/' => 'getIndex',
'/admin' => 'getAdminPage',
'/order' => 'save'
];
function __construct($fileOrderManager,$pageManager)
{
$this->fileOrderManager=$fileOrderManager;
$this->pageManager= $pageManager;
}
public function run()
{
$path = parse_url($_SERVER['REQUEST_URI']);
$method = $this->routes[$path['path']] ?? 'getIndex';
if(!method_exists($this, $method)) {
   return; // throw exception
}
    $this->$method();
     $this->pageManager->getIndex();
     $this->pageManager->getAdminPage();
     $this->fileOrderManager->save();
     //$this->fileOrderManager->list();
}
}

Что очевидно, в таком виде оно метод не находит, срабатывает условие method_exist и возвращает из функции. Как мне прописать, что бы вызвать методы из классов ($this->pageManager->getIndex(); и тп)?

Спасибо!

Answer 1

Как и сказанно - название методов не соответсвуют тому, что находиться в $routes. Роутер, как оказалось, должен иметь метод ,который обращаеться к методам менеджеров (Менеджер ДБ, и т.д). Т.е. Метод getIndex у роутера должен обращаться к менеджеру страниц pageManager и у него вызвать соответственный метод getIndex()

то есть , выходом было:

function getIndex() {  $this->pageManager->getIndex(); } 
READ ALSO
Как вырезать цифры PHP?

Как вырезать цифры PHP?

Как в строке

150
Полнотекстный поиск по типу LIKE или NEAR с плэйсхолдером

Полнотекстный поиск по типу LIKE или NEAR с плэйсхолдером

Поиск выводит только полное совпадение в ячейке, не могу найти как искачь по части иекста (например 4-5 символов и чтобы нашло все ячейки в которых...

175
Вывести родителей в рекурсии

Вывести родителей в рекурсии

написал вывод дерева:

137
Как отследить приходят ли данные на сервер websocket Ratchet?

Как отследить приходят ли данные на сервер websocket Ratchet?

Сделал по данному примеру https://gostashit/ru/stashes/1533-podklucenie-k-serveru-websocket-iz-web-prilozenia Сервер запускается,

180