1

PHPでmod_rewriteを使用したいので、次の形式でURLを解析します。

http://www.domain.com/Path-to-index.php/Class_to_Load/Function_to_Execute/Arguments_as_array_to_the_function

ロードするクラスは、次のようclassesに、strtolowerthenを付けてディレクトリに含まれます。ucfirst

http://www.domain.com/Path-to-index.php/SAMPLE関数が使用されなかったため、関数を含めclasses/Sample.phpて実行します。action_index

次に、このURLが開いている場合:http://www.domain.com/Path-to-index.php/SAMPLE/Login/User、PHPはをインクルードclasses/Sample.phpして実行する必要がありaction_Login($args = Array(0 => "User"));ます。

その方法を知っておく必要があります。

4

1 に答える 1

2

index.phpは次のようになります。

// @todo: check if $_SERVER['PATH_INFO'] is set
$parts = explode('/', trim($_SERVER['PATH_INFO'], '/')); // get the part between `index.php` and `?`

// build class name & method name
// @todo: implement default values
$classname = ucfirst(strtolower(array_shift($parts)));
$methodname = "action_" . array_shift($parts);

// include controller class
// @todo: secure against LFI
include "classes/$classname.php"

// create a new controller
$controller = new $classname();

// call the action
// @todo: make sure enough parameters are given by using reflection or default values
call_user_func_array(Array($controller, $methodname), $parts);

URLからindex.phpを削除するための.htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

PHPについてさらに学ぶために独自のフレームワークを作成することは常に興味深いことですが、実際にもっと大きなものをコーディングしている場合は、よく知られた、十分に文書化されたフレームワークを使用することを強くお勧めします。そこには多くの優れたフレームワークがあり、それらは十分にテストされており、以前に本番環境で使用されていました。上記のすべての@todo通知をご覧ください。これらはすべてフレームワークによってすでに処理されている問題であり、これらのことを気にする必要はありません。

于 2013-01-28T13:38:08.517 に答える