Help us understand the problem. What is going on with this article?

【Laravel】基本的なルーティングのまとめ

はじめに

現在Laravelについて学習しています。
その学習の履歴として今回はルーティングについてまとめました。
ざっくりとまとめているので、大枠を掴むためや復習のために見ていただけると幸いです。

ルーティングについて

今回はHTTPメソッドgetについてまとめます。
全部で9種類です。
ルーティングは下記の形式です。

Route::get('URL', '処理');

処理がクロージャとアクションの場合に分けて説明します
クロージャとはfunction(引数)のことで無名関数という意味です。
アクションとはMVCのコントローラに含まれるものです。
クロージャの場合は6種類で、アクションの場合は3種類です。

クロージャーの場合

処理がクロージャの場合について解説します

1. URLからテンプレートをレンダリング

URLからテンプレートにレンダリングする場合について解説します。

routes/web.php
Route::get('/', function () {
    return view('welcome');
});

/にアクセスすると
view関数によりresources/views/welcome.blade.phpをレンダリングする

2. URLからHTMLを直書き

レンダリングするだけでなくHTMLのソースコードを直書きすることもできます。

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

/helloにアクセスすると
<html><body><h1>Hello</h1></body></html>を表示します

3. 返すHTMLを変数として扱う(ヒアドキュメント)

上記の直書きの場合、HTMLが長くなるとソースが見にくくなります。
変数に代入して、見やすくしましょう

routes/web.php
$html = <<<EOF
<html><body><h1>Hello</h1></body></html>
EOF;

Route::get(hello, function ()  use ($html){
    return $html;
});

/helloにアクセスすると、
$htmlを表示します。

ヒアドキュメント
<<<EOF
~~
EOF;

~~の部分を変数に代入できるようにするために、EOFで挟みます。

4. URLにパラメータを挿入する

URLにルートパラメータを記載する方法を説明します。

routes/web.php
Route::get('hello/{msg}', function ($msg) {
$html = <<<EOF
<html>
<body>
<h1>Hello</h1>
<p>{$msg}</p>
</body>
</html>
EOF;
    return $html;
});

ルートパラメータに$msgを指定します。

5. ルートパラメータを2種類にする場合

ルートパラメータを2種類にする場合について説明します。

routes/web.php
Route::get('hello/{msg}/{pass}', function ($msg,$pass) {
});

URLの部分にパラメータを記述し、処理の部分に引数にルートパラメータを設定しましょう。

6. パラメタの入力を任意にする場合

上記の記述方法だとルートパラメータが必須とになります。
そのため、任意のパラメータにする方法を説明します。

routes/web.php
Route::get('hello/{msg?}', function ($msg='no_message') {
});

注意する部分は二つです。
- URL部分のルートパラメータに?をつける。
- 処理の引数の部分に初期値を設定する。

コントローラの場合

まず、コントローラを作成

ターミナル
php artisan make::controller HelloController

次に、コントローラにアクションを追加する

app/Http/Controllers/HelloController.php
public function index(){
    Return <<<EOF
        <html>
        <body>
            <h1>Hello</h1>
            if (count($msg)>0){
                <p>{$msg}</p>
            }
        </body>
        </html>
        EOF;
}

1. ルーティングでアクションを指定する

処理をアクションに指定しましょう

routes/web.php
Route::get(hello, HelloController@index);

/helloにアクセスするとHelloControllerindexアクションに飛びます

2. ルートパラメータの利用

ルートパラメータを設定します。
設定のやり方は上で説明したものと同じです。
入力を任意にするために?をつけています。

routes/web.php
Route::get(hello/{msg?}, HelloController@index);
app/Http/Controllers/HelloController.php
public function index($id= noname, $pass=unknown){}

3. シングルアクションコントローラ

シングルアクションコントローラ(1つのアクションしかないコントローラ)の場合について説明します。

routes/web.php
Route::get{'hello', 'HelloController'}

上記の場合はアクション名の指定はいりません。

app/Http/Controllers/HelloController.php
public function __invoke() {}

コントローラが少しだけ特殊です。
__invoke()が必要です。

以上で基本的なルーティングの説明は終わります。

疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした