Невозможно получить невыносимый запрос HMVC для работы в FuelPHP

В документации FuelPHP имеется следующий образец:

// or fetch the output of a module $widget = Request::forge('mymodule/mycontroller/mymethod/parms', false)->execute(); echo $widget; 

Это работает, когда функция, которую я action_ , имеет префикс action_ , но когда я action_ префикс (поскольку я не хочу, чтобы он вызывался браузером), он больше не работает, даже если я установил 2-й параметр в false .

Вот пример:


РАБОТАЕТ

В одном контроллере я вызываю:

 $widget = Request::forge('mymodule/mycontroller/mymethod')->execute(); echo $widget; 

В mycontroller:

 public function action_mymethod() { echo 'works'; } 

НЕИСПРАВНОСТИ с 404

В одном контроллере я вызываю:

 $widget = Request::forge('mymodule/mycontroller/mymethod', false)->execute(); echo $widget; 

В mycontroller:

 public function mymethod() { echo 'works'; } 

Вы не можете удалить префикс действия.

Вы не понимаете, как работает HMVC в FuelPHP. С точки зрения контроллеров запрос – это запрос, независимо от того, откуда он. Любое действие можно вызвать либо из URL (основного запроса), либо через вторичные запросы (HMVC).

Второй параметр метода Request :: forge () просто контролирует маршрутизацию. Если true (по умолчанию), запрос отправляется через механизм маршрутизации, поэтому маршруты будут применяться при сопоставлении URI запроса с контроллером / методом. Если false, механизм маршрутизации отключен, и прямое сопоставление производится контроллеру / методу.

Это понадобится вам, если ваша таблица маршрутизации содержит все в конце, чтобы избежать маршрутизации на внутренние контроллеры. Это предпочтительный способ экранирования контроллеров от вызова по основному запросу.

Если у вас есть контроллеры с общедоступными и внутренними методами, использование параметра маршрута может стать сложным, так как вам нужно исключить некоторые URI из catch_all.

В этом случае вы можете проверить тип запроса в действии контроллера, используя:

 \Request::is_hmvc() 

Это вернет false, если ваше действие вызывается по основному запросу (то есть через URL-адрес браузера) или true, если это вызов HMVC. Вы можете перенаправить в другое место или выбросить HttpNotFoundException, если хотите, чтобы ваш 404 был показан.