В документации 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 был показан.