Laravelを学び始める。ルーティングについて

  • 2019年11月20日
  • 2020年4月4日
  • Laravel

 

Laravelでプログラムを書き進めていくにあたって必須になってくるのがルーティングという仕組みです。これを理解していないとウェブページに画面を出力することができません。

今回はそんな、Laravelを始めて最初に勉強することになるであろうルーティングの仕組みについてまとめました。

 

通常のウェブサイトのディレクトリ構造

 

通常ウェブサイトにページを表示させたいときにはそのディレクトリにファイルを置くことで表示できるようになります。つまり、ホームディレクトリからのパスとURLが一致するような構造になっています。

 

例えばブラウザで「http://ドメイン名/hello/world.html」とアクセスすると、ホームディレクトリ直下のhelloディレクトリの中のworld.htmlが呼び出されて表示されます。

 

ファイルのディレクトリ構造_ドメイン名_hello_world_html

 

また、indexという名前のファイルは省略して表されることが多いので、「http://ドメイン名/」とアクセスすると、ホームディレクトリ直下のindex.htmlが呼び出されます。

 

ファイルのディレクトリ構造_ドメイン名/の説明

 

ここまではウェブに関する知識があれば知っているという方も多いと思います。

LaravelのようなMVCというフレームワークではこういった構造になっておらず、特別な仕組みにでURLに対する処理を分けるような感じになっています。それが以下で説明するルーティングという仕組みです。

 

Laravelのルーティング

 

Laravelでは入力されたURLに対する処理をルーティングという仕組みで処理しており、ファイルへのパスとは全く関係なく動くようになっております。

ルーティングの役割は以下の画像のイメージです。

 

ルーティングの仕組み

 

実際にやってみるのがいいと思うので、Laravelをインストールしたフォルダからroutesというフォルダを探し、その中のweb.phpというものを開いてみましょう。

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

初期状態だと以上のように書かれているかと思います。

このroutes/web.phpというファイルがURLと呼び出すファイルや処理の紐付けを行っており、このデフォルトに書かれている処理によってLaravelの初期画面が書かれているファイルを呼び出しています。

 

デフォルトに書かれている処理の文法

 

ではこのデフォルトに書かれているルーティングの文法について見ていきます。まず、Routeのgetメソッドについて、見ていきます。

Route::get(ドメイン以下のアドレス, 実行する関数);

まず、getの第一引数にはドメイン以下のアドレスを指定します。デフォルトに書かれている「’/’」とはトップページすなわちドメイン以下に何もつけなかった場合という意味になります。

第二引数には呼び出す関数を入れており、この戻り値が実際に表示されるような形となっています。

 

ではデフォルトの第二引数に書かれている、

function () {
  return view('welcome');
}

の戻り値であるview(‘welcome’)とはどのファイルを呼び出しているのでしょうか?

こちらはviewという関数にてresources/views/フォルダを参照し、引数の’welcome’にてその中のwelcome.blade.phpを呼び出してねという処理になっています。

 

まとめると、

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

という処理は、ドメイン以下に何もつけないで呼び出された場合、resources/views/welcome.blade.phpを呼び出してくださいという処理です。

welcome.blade.phpを開くとわかると思いますが、実際に書かれているのはhtmlのコードになっていて、これが表示されているというわけです。

 

様々なルーティングの書き方

 

では、ここからルーティングの書き方についていくつか紹介します。

 

以下は「/hello」にアクセスするとreturnで記述された文字列を表示します。

Route::get('hello', function () {
  return 'Hello World';
});

 

以下は「/hello」にアクセスしたときgetメソッド外に変数を用意して使用する例です。

$hello = 'Hello World';
Route::get('hello', function () use ($hello) {
    return $hello;
});

 

以下は「/hello」にアクセスするとreturnで記述されたhtmlを表示します。

Route::get('hello', function () {
  return '<html><body><h1>Hello World</h1></body></html>';
});

 

以下は「/hello/OO」という形でアクセスしたとき、(OOはどんな文字列でもOK)そこに記載された文字列を変数$worldに引き渡して使えるようになります。

Route::get('hello/{world}', function ($world) {
  return '<html><body><h1>Hello '.$world.'</h1></body></html>';
});

また、この場合だと「/hello」とアクセスするとエラーになってしまうので、それを回避するには以下のように書きます。

Route::get('hello/{world?}', function ($world = '') {
  return '<html><body><h1>Hello '.$world.'</h1></body></html>';
});

もし「/hello」以下に何も指定されなかった場合は、デフォルトとして”が入るようになりエラーにならなくなります。

 

以下は「/hello」にアクセスするとresources/views/hello/index.blade.phpを呼び出します。

Route::get('hello', function () {
  return view('hello.index');
});

 

また、view関数の第二引数に連想配列を指定することで、ファイルに変数も渡せます。

Route::get('hello/{world}', function ($world) {
  return view('hello.index', ['world' => $world]);
});

これでresources/views/hello/index.blade.php内で、変数$worldが使用できます。

 

まとめ

 

ルーティングについていかがだったでしょうか。

簡単に言うとルーティングとはURLと呼び出す処理を紐づけるものということがわかりました。

 

関連記事

  LaravelのようなMVCと呼ばれるフレームワークでは、表示部分と処理部分を分けて書くように設計されており、その2つの仲介役的な役割をコントローラーが担います。 前回ルーティングのやり方について書きましたので、当[…]

Laravelのコントローラーの作成

 

最後に…   Laravelをもっと勉強したいなら以下の本がおすすめです。