2011-06-22 14 views
0

php.info(または他の設定ファイル)に、PHPが呼び出されるたびに実行されるスクリプトを示す方法はありますか?PHPランタイムのフック

特定のページのHTTPリクエストを、そのページを表すControllerクラスにマッピングすることに興味があります。これは、MVCフレームワーク(CIなど)の多くの動作と同様です。

たとえば、ユーザーは/webroot/some/url/widget.phpにマップするリンクをクリックしますが、代わりに/webroot/app/mvc/controllers/WidgetController.phpクラスが呼び出されます。

これを行うには、CIのようなMVCフレームワークが実行され、「ああ、要求はwidget.phpのためのものですが、実際には実行したいスクリプトを実行することによってPHPランタイムを「フック」する方法を見つけましたWidgetController.phpオブジェクトを実行してください。

アイデア/思考/提案/懸念?

ありがとうございます!

答えて

0

ルータとapache mod_rewriteまたは同等のものが必要です。 mod_rewriteを設定して、すべての要求を/index.phpなどの単一のファイルに送信します。ルータは要求URLを調べ、ロードするコントローラファイルと呼び出すメソッドを決定します。かなり多くのMVCフレームワークには、この機能が組み込まれており、すべて同じように動作します。

1

私はあなたがここで間違っているかもしれないと思います。 Zend Frameworkと他のフレームワーク私が知っているのは、mod_rewriteまたは同様の手法を使ってリクエストをリダイレクトし、それから何らかの種類のFront Controllerによって処理されます。

これは、example.org/mypageへのリクエストがApache(PHPではない)からmyfrontcontroller.phpにリダイレクトされていることを意味し、myfrontcontroller.phpは受信リクエストの処理方法を決定します。

+0

ありがとう@Philipp!それで、これはすべてのGETとPOSTデータがmyfrontcontroller.phpにも送られることを意味しますか? – Pam

+0

はい。 mod_rewriteを使用すると、フロントコントローラにリダイレクトされる内容を決定できます。 example/foo/...へのすべてのリクエストをexample/controllers/foocontroller.phpにリダイレクトするルールを指定するなど、複数のフロントコントローラを使用することもできます。example/barへのすべてのリクエストはexample/controllers/barcontroller.php。 –

+0

symfony2はPhillippの説明したリクエストフローを正確に実装しています。http://symfony.com/doc/current/book/routing.html#routing-under-the-hood – bfncs

0

Webルートのindex.phpで十分である必要があります。パスはサーバー変数PATH_INFOとして渡されます。

0

http://us3.php.net/manual/en/ini.core.php#ini.auto-prepend-file

編集を参照してください:私の答えは、単にFYIであることを意味します。 mod_rewriteは、問題を解決するために受け入れられる方法です。

+0

こんにちは@Alex - 確認できますかこのmod_rewriteメソッドがGETとPOSTのデータをコントローラクラスにも "転送"するかどうか役に立ったお返事ありがとう! – Pam

+0

一般に、はい。 (それがあなたの好みの場合は、ルールを設計することはできません)。通常、「すべてをindex.phpに送信する」というルールがあり、次にindex.phpはPATH_INFOを調べて何をすべきかを判断します。 –