Не удается получить неуправляемый HMVC-запрос для работы в FuelPHP - PullRequest
0 голосов
/ 31 марта 2012

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

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

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

Вот пример:


РАБОТЫ

В один контроллер я звоню:

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

В моем контроллере:

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

СБОЙ с 404

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

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

В mycontroller:

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

1 Ответ

6 голосов
/ 31 марта 2012

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

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

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

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

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

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

\Request::is_hmvc()

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

...