LoginSignup
0
0

More than 1 year has passed since last update.

parse_urlを使ってURLパラメーターが含まれたURLで適切なファイルを読み込む方法

Last updated at Posted at 2021-07-23

はじめに

現在phpを使ってバックエンドの基礎を学習しています。
その中で、つまづいたポイントと対処法を記事にします。

環境

MAMP(Apache、MySQL、PHP)を使ってバックエンド開発

URLパラメーター

PHPを使ってバックエンド開発を勉強していますが、
URLの末尾に?をつけてパラメーターを渡すことで、リダイレクトした先の表示を柔軟に変更させることができます。

例えば

/hoge/bar/foo?var=1000

のようなURLにGETリクエストを送信した場合、

$_GET['var']

というグローバル変数に、1000が格納されるので、これを使って画面表示を変化させることができます。

例えば、example.view.phpに次のようなコードを記述してみます。

<?php
namespace view\example

function index($var){
?>
 <span><?php echo $var?></span>
<?php
}
?>

これを使って、example.controller.phpを次のようにしてみます。

<?php
namespace controller\example

function get(){
 \view\example\index($_GET['var']);
}
?>

そして、先程の

/hoge/bar/foo

にリクエストを送ると、example.controller.phpを読み込むように設定しておいたとします。

すると、

/hoge/bar/foo?var=1000

にgetリクエストを送ったときの表示画面は

1000

となり、

/hoge/bar/foo?var=500

の時は

500

になります。

つまづいたポイント

先ほど

/hoge/bar/foo

にexample.controller.phpを対応させました。

すると、パラメーターをつけた状態の

/hoge/bar/foo?var=1000

というパスは、当然のことながら/hoge/bar/fooとは別ものですので、そのまま上記のパスにgetリクエストを送ってもexample.controller.phpは読み込まれません。

そこでparse_urlを使います。

$url = parse_url('/hoge/bar/foo?var=1000');

とすると、引数に渡されたパスは、
'path' => ?より前の文字列
'query' => ?より後の文字列
のように、分割されて連想配列に格納されます。

なので、今回の場合

$url['path'] = '/hoge/bar/foo'
$url['query'] = 'var=1000'

というふうに分割されて格納されることになります。

これを、リクエストが送られてきた際に毎回実行することで、
URLパラメーターがくっついているURLに関しては$url['path']にリクエストを送るように処理を変更してやることができます。?var=1000がくっついていないのでちゃんとexample.controller.phpを読み込んでくれます。また、
$_GET['var']にはパラメーターが格納されたままなので、表示画面の変更には支障はありません。

まとめ

今回は、URLパラメーターが含まれたURLにリクエストを送ったときに、パラメーターに邪魔されずに適切なファイルを読み込めるようにする方法について紹介しました。

参考になりましたら幸いです。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0