2

コモンが使用されるようにURLをルーティングするルーターを備えた自作のMVCfwがありますexample.com/controller/action。アプリケーションが次のようなサブディレクトリ内にデプロイされると、問題が発生します。

example.com/my_app/controller/action/?var=value

私のルーターmy_appは、これがコントローラーの名前でありcontroller、メソッドであると考えています。

私の現在の解決策は、インストール時に構成内のサブディレクトリ名を手動で要求することです。これを手動で行いたいのですが。以下の私の質問を参照して、これを間違った方法で解決し、間違った質問をするつもりかどうかを知らせてください。

私の質問:2つのパスがある場合、一方の端から共通の部分を切り捨てて、もう一方の端から削除するにはどうすればよいですか。

A = / var / www / my_app / pub B = / my_app / pub / cntrl / actn

Bから/my_app/ pubを削除し、/ cntrl / actnのままにする最も速いワンライナーは何ですか?基本的に、文字列のような一般的な分母を取得するためのPerl風の方法を探しています。

ご入力いただきありがとうございます

4

2 に答える 2

3
my @physical_parts = split qr{/}, $physical_path;
my @logical_parts  = split qr{/}, $logical_path;

my @physical_suffix;
my @logical_prefix;
my $found = 0;
while (@physical_parts && @logical_parts) {
    unshift @physical_suffix, pop(@physical_parts);
    push @logical_prefix, shift(@logical_parts);

    if (@physical_suffix ~~ @logical_prefix) {
       $found = 1;
       last;
    }
}
于 2012-07-23T22:20:58.817 に答える
1

これを解決する方法は、このロジックをフロントコントローラー(サーバーが存在しないすべてのファイル要求を送信するファイル、通常はindex.php)に追加することです。

$fontControllerPath = $_SERVER['SCRIPT_NAME'];
$frontControllerPathLength = strlen($fontControllerPath);

$frontControllerFileName = basename($fontControllerPath);
$frontControllerFileNameLength = strlen($frontControllerFileName);

$subdirectoryLength = $frontControllerPathLength - $frontControllerFileNameLength;

$url = substr($_SERVER['REQUEST_URI'], $subdirectoryLength - 1);

これがコードパッドのデモです。

これは何をしますか?フロントコントローラーが(wwwルートに対して)次の場所にある場合は、に/subdir/myapp/なり$_SERVER['SCRIPT_NAME']ます/subdir/myapp/index.php。実際のリクエストURIはに含まれてい$_SERVER['REQUEST_URI']ます。たとえば、それがであるとしましょう/subdir/myapp/controller/action?extras=stuff。サブディレクトリプレフィックスを削除するには、その長さを見つける必要があります。basename()これは、wwwルートを基準にしたスクリプト名の長さからスクリプト名の長さ(から取得)を引くことによって求められます。

File that receives request: /subdir/myapp/index.php (length = 23)
Filename: index.php                                 (length = 9)
                                                                 -
-------------------------------------------------------------------
                                               14 chars to remove

/subdir/mpapp/controller/action?extras=stuff
              ^
              Cut off everything before here
于 2012-07-23T22:21:28.473 に答える