質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

376閲覧

Laravelのルーティング機能のような実装を自前でしたい

miu_ras

総合スコア902

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/05/10 19:34

簡易なサイトを作ろうとしており、Laravelのルーティング機能のような実装をしたいと思っています。

各ページ共通のPHPの処理はあるのですが、ページ個別のPHPの処理はない予定であること、ログイン・バリデーションなど不要であることから、Laravelの機能の多くは使わないので、自前で作ってもいいかなと思いその選択肢を検討しています。

とりあえず思いついたのは.htaccessでリダイレクトさせる方法です。一応、以下の設定で実現できそうなことは確認しました。

htaccess

1RewriteRule ^(.*)/$ /index.php?p=$1 [L]

https://example.com/page1
にアクセスがあったら
https://example.com/index.php?p=page1
にリダイレクトし、index.phpでほとんどの処理を行う。

現状の選択肢は以下の2択です。

  • 案1:.htaccessでリダイレクトしてindex.phpで処理
  • 案2:Laravelを使う

Laravelのソースをちらっと見た感じだと、正直仕組みはよくわからなかったのですが、案1とは違う方法で実装していそうで、つまり案1以外の実装方法があるんだろうなと思いました。

また、案1は動くか動かないかで動くことを確認しただけで、思わぬデメリットがあるかまで検討していません。

質問は以下です。

  • ルーティング機能について他の実装方法の候補(できれば具体的に)
  • 案1案2を含め、それぞれのメリット・デメリット

これを教えてください。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

最小限のRouterの実装は概ね以下のようになります。

PHP

1// index.php 2 3$route = [ 4 "/" => index, 5 "/test" => test, 6 ... 7]; 8 9$uri = $_SERVER['REQUEST_URI'] 10 11return $route[$uri]() 12 13function index() { 14 return "Top Page"; 15} 16 17function test() { 18 return "Test Page"; 19}

アクセスされたURIとそれに対応するコールバックによって構成されます。

サーバはindex.phpに対して.htaccessで全てのリクエストをリダイレクトします。
この構造の上にGETクエリのハンドリングやミドルウェアの仕組みなどが実装されていくことになります。
このような設計をフロントコントローラパターンと言うこともありますね。

ただし、CookieやGETクエリ、POSTデータのハンドリングなどの実装を1から記述するのは中々大変なのと、中途半端にやるとセキュリティホールを作り込むことになるのでRouterの独自実装はあまりオススメできませんね。

Laravelのフル機能が必要ないのであれば、LumenSlim Frameworkなどのマイクロフレームワークを使ってみるのもよいかもしれません。

Lumen
https://lumen.laravel.com/docs/9.x

Slim Framework
https://www.slimframework.com/

投稿2022/05/10 22:32

madoka-t

総合スコア379

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miu_ras

2022/05/12 06:23 編集

リダイレクトさせても$_SERVER['REQUEST_URI']で元のURLが取れるんですね。Laravelのソース見てもよくわからなかった原因はそこがわかっていない事でした。そこがわかったことによってLaravelのルーティングの実装もほぼ理解できスッキリしました。 マイクロフレームワークも検討してみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問