これを行う最も簡単な方法は、セッション変数とコードへの単一のエントリ ポイントを使用することです。
1 つの index.php ファイルでユーザーがコードを実行し、必要に応じて出力を表示する場合は、セッション オブジェクト内の変数を使用して、別の状態になるまでユーザーを同じページにリダイレクトします。
次のようなコードの何か:
if ($_SESSION['in_combat'])
{
// redirect user back to the same page
}
else
{
// allow other action as requested by link clicked
}
セッションが設定されているtrue
場合、アクションはユーザーを注意が必要なページにリダイレクトします。それ以外の場合は、クリックしたリンクに基づいてアクションを実行できます。
編集:単一のエントリポイントとは、コードのすべてが単一のindex.php
ページから機能し、コードの実行のさらなるフローを制御することを意味します。そのインデックスページは、さまざまなセッション変数をチェックし、さまざまなPOST
、GET
リクエストなどを解釈して実行します。単一のエントリ ポイントは、ユーザーが実行するはずのアクションのみを実行できるようにするコードを作成するときに実行できる最善の方法です。
編集 2: まず、単一のエントリ ポイントは、PHP が必要に応じて実行されるようにする方法です。つまり、すべての HTML が単一の PHP コードを介して表示されます。私は通常、ベースの index.php ページを作成して、渡された変数に応じて実行フローを指示します (それらがセッションにあるかポスト/取得リクエストにあるか)。
これが常に最も効率的な方法であるとは限りませんが、コードに渡される変数に応じて、表示と実行の両方を制御する case ステートメントを使用するのが一般的です。
すでに MVC をセットアップしている場合、これは明らかに、ユーザーに表示されるページの実行を制御する場所です。これは明らかに index.php ページそのものです。
変数に関しては$_SESSION
、これは簡単です。制御フローを MVC に入れると同時に、それをトリガーするコードをプログラムの実行パス内に埋め込みます。つまり、次のような制御フローを意味します。
if($_SESSION['inCombat'])
{
// This is where you redirect the user to code that ensures that the user cannot get out of the combat sequence if they are in it already.
}
else
{
// Normal Flow of execution...
}
if($hasInitiatedCombat)
// or something like the following:
// if($_REQUEST['startCombat']==true)
{
// This is where the code execution path leads to when combat is initiated.
$_SESSION['inCombat']==true;
}
この単純なコードを使用すると、人が戦闘 (またはその他のもの) に入るたびに、セッション変数が設定されTRUE
、要求されたページのリンクがこの変数をチェックして、実行するコードが決定されます。に設定されている場合TRUE
、リンクをクリックするだけで現在のコード実行パスを終了して別の場所に移動できるようにするのではなく、コードが自動的に実行されて、戦闘フェーズ内にいることが保証されます。