0

In the documentation of FuelPHP, it has the following sample:

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

This works when the function I am calling has the action_ prefix, but when I remove the prefix (since I don't want it to be called by the browser) it doesn't work anymore even if I set the 2nd parameter to false.

Here is an example:


WORKS

In one controller I call:

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

In mycontroller:

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

FAILS with 404

In one controller I call:

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

In mycontroller:

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

1 に答える 1

6

アクション プレフィックスを削除することはできません。

FuelPHP の HMVC がどのように機能するかを理解していません。コントローラの観点からは、リクエストはどこから来たかに関係なくリクエストです。アクションは、URL (メイン リクエスト) またはセカンダリ リクエスト (HMVC) から呼び出すことができます。

Request::forge() メソッドの 2 番目のパラメーターは、ルーティングを制御するだけです。true (デフォルト) の場合、リクエストはルーティング エンジンを介して送信されるため、リクエスト URI をコントローラー/メソッドにマッピングするときにルートが適用されます。false の場合、ルーティング エンジンはバイパスされ、コントローラー/メソッドへの直接マッピングが行われます。

内部コントローラへのルーティングを回避するために、ルーティング テーブルの最後にキャッチオールが含まれている場合、これが必要になります。これは、コントローラがメイン リクエストによって呼び出されないようにするための推奨される方法です。

public と internal の両方のメソッドを持つコントローラがある場合、route オプションの使用は、catch_all から一部の URI を除外する必要があるため、複雑になる可能性があります。

その場合、次を使用してコントローラー アクションのリクエスト タイプを確認できます。

\Request::is_hmvc()

これは、アクションがメイン リクエストによって (つまり、ブラウザの URL を介して) 呼び出された場合は false を返し、HMVC 呼び出しであった場合は true を返します。404 を表示したい場合は、他の場所にリダイレクトするか、HttpNotFoundException をスローすることができます。

于 2012-03-31T15:51:35.877 に答える