Laravel体験記 | ルーティングとコントローラー

青い書籍「Laravel入門」で学んでいく。

ルーティング

routes/web.phpをいじる。

たぶん、実際にはこんな使い方しないと思う。

実際にはコントローラーを割り当てるんじゃないかなぁと思う。

けど、コントローラーを仲介せずに直接viewを出力できるのは嫌いじゃない。(使う場面はあまりないだろうが)

Route::get('hello/{msg?}', function($msg="default message"){
  $html = <<<EOF
<html>
<body>
<h1>Hello</h1>
<p>This is {$msg} page.</p>
</body></html>
EOF;
  return $html;
});

コントローラーの作成

artisan(アーティザン)コマンドとやらを使ってコントローラーを作るらしい。

使わなくてもコントローラーは作れるらしい。

じゃあ使いたくないんだが、一応使ってみる。

php artisan make:controller HelloController

app/Http/Controllers/に、HelloController.phpが作られていた。

中身は、

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelloController extends Controller
{
    //
}

こんくらいなら自分で書くわ!って純粋に思った。

なぜコマンドを用意したんだろう。

偉い人にしかわからないのかもしれない。

アクションの作成

HelloController.phpを編集してアクションを作る。

htmlを作って、returnするだけの例。

class HelloController extends Controller
{
    public function index(){
      $html = <<<EOF
<html>
<body>
<h1>INDEX ACTION</h1>
</body>
</html>
EOF;
      return $html;
    }
}

もちろんこれだけでは動かない。ルーティングの設定をしてない。

web.phpをもう一度開く。

Route::get('hello', 'HelloController@index');

これでURLとコントローラー、アクションの紐付け、ルーティングができた。

さっきまでは、ルーティングが直接htmlを返していたが、

これでコントローラー経由でhtmlを返すようになった。

URLパラメータ

アクションは指定できた。

じゃあパラメーターはどうするんだ?っていうのが次。

    public function index($msg="default message"){
      $html = <<<EOF
<html>
<body>
<h1>INDEX ACTION</h1>
<p>{$msg}</p>
</body>
</html>
EOF;
      return $html;
    }

これだけじゃやはりだめ。ルーティングもいじる。

Route::get('hello/{msg?}', 'HelloController@index');

まとめ

コントローラーとルーティングの紐付けがわかった。

けど疑問。

コントローラーごとにルーティングが必要なのはいいけど、アクションごとにもルーティングが必要なのだろうか?

もしかして、ルーティングが面倒だったらアクションの中でパラメータによって分岐しろってことなのか?

学習していくと晴れる疑問なのかもしれない。