これは、frontController を作成する最初の試みであり、いくつかの小さな問題に遭遇しました。
最初に、私のサイトがどのように見えるかの印象を述べさせてください。ブラウザで
開くhttp://mysite.com/test
と、サーバーは GET パラメータ $controller (test) を使用して index.php を呼び出します。これは .htaccess によって行われます。index.php では、クラス $controller のインスタンスが作成されます。これには、PHP の __autoload 関数を使用します。したがって、コードは次のようになります。
$controller = $_GET["controller"];
function __autoload($controller)
{
include("controllers/$controller.php");
if(!class_exists($controller, false))
{
eval
('
class '. $controller . '
{
public function __construct()
{
include("404.html");
exit();
}
}
');
}
}
$application = new $controller;
私が提供したコードを見ると、その中にeval()が含まれていることに気付いたかもしれません。これを使用して、$controller クラスが存在しない場合の致命的なエラーを回避し、代わりに 404 を表示します。
そして、ここから楽しみが始まります:誰かが次のような URL を入力すると
あるだろう
解析エラー: 構文エラー、予期しない '!'
と...
致命的なエラー: クラス 'ImATroll!:D' が見つかりません
質問は次のとおりです。どうすればこれをキャッチできますか? クラス名に許可されている文字のみを含むように $controller 変数をエスケープするにはどうすればよいですか?