2017-02-08 19 views
0

私は学習目的のために独自のフレームワークを構築しています。URLプレースホルダ一致する正規表現

urlはlocalhost/admin/viewと言いますが、正しいルートと正しいコントローラとの対応は問題ありません。この問題は、urlに次のようなIDがある場合に発生します。localhost/admin/view/12私は、URLと一致するように定義されたルートを含む私のルート配列(フレームワークのアプローチ)をプレースホルダimを使用しようとしています。私はプレースホルダを持つルート配列から値をURLと一致する方法がわからない

public function getRoute() { 
    $this->route = array(
     [ 
      'url' => "admin/view", 
      'controller' => 'AdminController', 
      'action' => 'viewPosts', 
      'type' => 'GET' 
     ], 
     [ 
      'url' => "admin/view/{id}", 
      'controller' => 'AdminController', 
      'action' => 'viewPostById', 
      'type' => 'GET' 
     ], 
     [ 
      'url' => "admin/store/posts", 
      'controller' => 'AdminController', 
      'action' => 'storePosts', 
      'type' => 'POST' 
     ], 
    ); 
} 

:ここ

は、ルート・アレイがどのように見えるかです。 URLがlocalhost/admin/view/1の場合と同様に、配列の値admin/view/{id}とどのように一致させるのですか?その後、どのようにしてURLからGETパラメータを簡単に取得できますか?私はparamsがあまりにもハードではないはずですが、私はURLを爆発させずに(多分正規表現を使って)多すぎる操作をしないでそれらを取得しようとしていることを知っています。

答えて

1

あなたはルートマッチングで他のアプローチを使用する必要があります。他のフレームワークがどうやってそれを行うのかを見てみることをお勧めします(検索とhtaccessの仕組みを見てください)。 正規表現を使用して一致を処理する必要があります。admin/view/{id}の場合は、次のように考えることができます。admin/view/.* admin/view/の後のすべてが自分のIDになります。

また、CakePHPのような他のフレームワークのdocummentationを読むことができます:$ _SERVER [ 'QUERY_STRING'](http://se2.php.net/reserved.variables.server.php

よろしく:PHPでhttps://book.cakephp.org/3.0/en/development/routing.html

たちは、クエリ文字列を取得する機能を持っています。

+0

おそらく私はそれをとてもうまく説明しませんでしたが、私の.htaccessは、フレームワークのようにきれいなURLを使ってindex.phpにすべてをリダイレクトしています。私はちょうど{id}のようなプレースホルダーを求めていました。 Btw the admin/view /.*私は既にadmin/view /。\ d * $と同様のものを試していましたが、私はそれを見つけることができませんでした。フレームワークの内部メカニズムがルーティングのために通常どのように機能するのかを少し説明してください。フレームワークがそれらを分割して送出する方法をフレームワークが処理する方法に似ていますか? –