Почему один protected метод вызывается, а другой — нет?

Какой-то абсурд. MVC, FrontController разбирает URL и дергает нужный метод нужного класса.

По ссылке site.ru/software/add дергается software\Controller->showAdd()
По ссылке site.ru/software дергается software\Controller->showIndex()

Оба метода protected:

protected function showAdd()
    {
        echo 'I\'m add';
    }


    protected function showIndex()
    {
        echo 'I\'m index';
    }


Вот, что дергает через Reflection во фронте:

$rc = new \ReflectionClass($this->controller);
// проверка ошибок...
$controller = $rc->newInstance($this->request, $this->settings, $this->logger, new Response);
$method = $rc->getMethod($this->action);
$method->invoke($controller, ...$this->params);


Первый метод (ссылка) дергается на ура - выводится I'm add, а по второй ссылке пишет вот такое:

Uncaught ReflectionException: Trying to invoke protected method asoft\entries\Controller::showIndex() from scope ReflectionMethod in D:\Мои проекты\Проект COM\audiophilesoft.local\vendor\asoft\FrontController.php:81
Stack trace:
#0 D:\Мои проекты\Проект COM\audiophilesoft.local\vendor\asoft\FrontController.php(81): ReflectionMethod->invoke(Object(asoft\software\Controller))
#1 D:\Мои проекты\Проект COM\audiophilesoft.local\index.php(43): asoft\FrontController->invoke()
#2 {main}


Что за ересь? Методы же абсолютно одинаковые, и одинаково запускаются.
И странно не то что второй protected не работает, а то что работает первый!..

PHP 7 @ Apache 2.4
  • Вопрос задан
  • 269 просмотров
Решения вопроса 1
Audiophile
@Audiophile Автор вопроса
Всё ясно, showAdd() вызывался всё-таки через промежуточный публичный метод add().
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы