ウェブログラム

実践しながらじっくり学ぶ、Webプログラム習得サイトです。自作サービスの公開までWeb開発を実践していきましょう!

Webrogram

自分のオリジナルサービスを作って運営しよう!

【Laravel5.6 router】ルーティングを触って仕組みを理解する

Laravel入門記事一覧はこちら webrogram.hatenadiary.jp

今回はLaravelの中でも非常に重要なルーティングという機能について見ていきます。

環境

  • PHP7.5.2
  • Laravel5.6
  • CentOS7

対象読者

  • Laravelの環境構築が完了している
  • 192.168.33.10:8000で仮想マシンを立ち上げている(ここが分からなければ、前の記事を見てください〜)
  • フレームワーク超初心者

ルーティングとは

ルーティングとは簡単に言うと、URLを見て処理を振り分ける仕組みになります。 例えば、「/abc」というURLにアクセスすると、xyzという処理を呼び出したりします。

正しくは、URLと共にHTTPのメソッドも含めて処理を振り分けていきます。 例えば、

  • HTTPメソッド「get」でURL「/abc」に来た場合
  • HTTPメソッド「post」でURL「/abc」に来た場合

この2つは別々の処理を呼び出すことができます。

  • get + /abcは「表示する処理」
  • post + /abcは「何かを登録する処理」

この仕組があるので、URLの設計を自分の思い通りに出来ますし、比較的統一されたURLとなっていきます。 また、ここで言うURLはURIと呼ばれたりもしますので、かるく覚えておきましょう。

処理を振り分けてみよう

それでは実際にコードを書いて、処理を振り分けたりしていきましょう。

hello world表示

まずは、特定のURIにアクセスすると、ブラウザに「hello world」と表示されるルーティングを作成しましょう。

ルーティングのファイルは「routes/web.php」にあります。

最初は以下のような記述があるかと思います。

Route::get('/', function () {
    return view('welcome');
});

これを、下のようにしましょう。

Route::get('/', function () {
    dump("hello world");
});

URI「/」にアクセスすると、以下のようになっているかと思います。

f:id:iku8:20180523234119p:plain

これは「/」に来た場合function()の中身のコードを実行するというものです。 URIを以下を「/abc」に設定したい場合は

Route::get('/abc', function () {
    dump("hello world");
});

このようにすることで、ブラウザで「/abc」にアクセスすると「hello world」が表示されます。 これで、何をルーティングがしているのかの超基礎は分かったと思います。

URLの値を取得して表示

次はURLの値をそのまま表示してみます。 以下のようにコードを変更してください。

Route::get('/user/{name}', function ($name) {
    dump("hello world $name");
});

ブラウザでURI「/user/takeshi」にアクセスすると。

f:id:iku8:20180523234142p:plain

ブラウザでURI「/user/minamino」にアクセスすると。

f:id:iku8:20180523234145p:plain

となっています。 つまり、/user/の後に続く文字列がnameという変数に入り、それを表示しているので、 URIの記述を変えると、dumpされている文字もコロコロ変わっていくということです。

どうですか、楽しくなってきましたよね!

URLのパラメータを受け取って表示

次はより実践的なことをしましょう。 さっきのURIを変えて...なことは実はあまりしません。 「名前」などの値を取得して、変数として使いたい場合にはパラメータを利用します。(正確にはgetパラメータ)

次のようなコードを書いてみてください。

use Illuminate\Http\Request;

Route::get('/user', function (Request $req) {
    dump("hello world $req->name");
});

すると同じようにtakeshiが表示されると思います。

f:id:iku8:20180523235100p:plain

日本語も大丈夫ですよ〜

f:id:iku8:20180523235129p:plain

getパラメータでなくても、最初の方に紹介した方法でも日本語大丈夫です。 あとは、パラメータの数を

/user?name=takeshi&age=22

とかに増やして、同じように取れるか実践してみてください。

ageを取るには$req->ageとすればOKです。

※POSTメソッドを使ったルーティングについては、Viewが出てきたタイミングでおなっていこうと思います。 会員登録などの入力フォームが出てきた場合、POSTメソッドを利用してリクエストを送信したりします。

この記事でよくわからないところ、間違っているところあればコメントよろしくお願いします。