【Laravel】ルーティングについて

こちらの記事は以下の書籍を参考に執筆しました

- [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)



#アプリケーションの構成
作成したプロジェクトトの中身をまずな見ていきます。
##Laravelのファイル
プロジェクト作成時に作成されるファイル類です。
Git関連やComposer関連なども有り、必ずしも回はる車がすべて利用するものでは有りません。

|ファイル|説明|
|---|---|
|.editorConfig|エディタに関する汎用設定ファイル|
|.env,.env.example|動作環境に関する設定情報|
|.gitattributes,.gitgnore|git利用に関する設定情報|
|.styleci.yml|StyleCIというコードチェッカーのファイル|
|artisan|artisanコマンド|
|composer.json,composer.lock|composerの利用に関するもの|
|package.json, package-lock.json|Javascriptのパッケージ管理ツール(npm)で利用するもの|
|phpunit.xml|PHPUnit(ユニットテストプログラム)に関するもの|
|server.php|サーバ起動時に利用されるプログラム|
|webpack.mix.js|webpackというJavascriptパッケージツールで使うもの|
|yarn.lock|yarnというパッケージマネー0ジャが使うファイル(自動生成される)|

>出典： [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


##Laravelのフォルダ
フォルダはそれぞれの役割が決まっています。

|フォルダ|説明|
|---|---|
|app|アプリケーションの開発時には、ここにスクリプトを追加|
|boostrap|アプリケーション実行時に最初に行われる処理をまとめる|
|config|設定関連|
|database|DB関連|
|publick|公開フォルダ。Javascriptのスタイルシートなど、外部にそのまま公開されるファイルをまとめる|
|resources|リソース関連の配置場所。|
|routers|ルート関連の保存場所。アクセスするアドレスに割り当てられるプログラムの情報を記す|
|strage|ファイルの保存場所|
|tests|ユニットテスト関連のファイルが用意されている|
|vendor|フレームワーク本体のプログラムがまとまってる|

>出典： [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)

以上で今後最も使っていくのは「app」と「routers」フォルダです。
プログラムを作成し、それを適切なアドレスに割り当てるにはこの2つのフォルダにファイルを作成したり、用意されたファイルを編集したりする必要があります。

続いて「resources」フォルダです。
これは画面にwebページを表示する時に必要です。
「database」フォルダも使っていくことになります。

その他のフォルダは使用頻度は低くなるはずです。

まずは「app」「routers」「resources」の3つ役割を把握します。

##appフォルダについて
最も需要且つ利用頻度が高いです。
appフォルダには以下のようなファイルがあります。

|ファイル|説明|
|Console|コンソールプログラムを配置|
|Exceptions|例外に関する処理を配置|
|Http|WEBアプリケーションにアクセスした時の処理をまとめる。アプリケーションの基本的なプログラムはここに作成|
|Providors|プロバイダと呼ばれるプログラムを配置|
|User.php||ユーザ認証に関するスクリプト。|

最も重要なのは**Http**フォルダです。
基本的なプログラムをここに書いていきます。
ほかは必要に応じてって感じです。

#ルーティングとroutersフォルダ
ウェブサイトでは、例えば`A`フォルダに`B.html`を入れれば`http://○○/A/B.html`でアクセスできますが、Laravelはそうはいきません。

**Laravelは特定のアドレスにアクセスすると、そのアドレスに割り当てられたプログラムが実行されます。**

このように「〇〇というアドレスにアクセスしたら✕✕という処理を呼び出す」という関連付けをしているのがルーティングです。

##routersフォルダについて
このルーティング情報をまとめているのが、routersフォルダです。
中身はこうなってます。

|ファイル|説明|
|---|---|
|api.php|APIのルーティング。|
|channels.php|ブロードキャストチャンネルのためのルーティング|
|console.php|コンソールプログラムのためのルーティング|
|web.php|一般的なWebページとしてアクセスするためのルーティング|

>出典： [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)



Webページとして公開するものは基本的にすべてweb.phpにルート情報を書きます。
#ルート情報の記述

```php5:web.php
<?php
Route::get('/', function () {
    return view('welcome');
});

```
>出典： [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


web.phpを見てみるとこの様になっていて、トップページにアクセスしたときの処理について書かれてます。

##ルート情報の基本(GETアクセス)
```php
Route::get(アドレス,関数など);
```
>出典： [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


Routerクラスの静的メソッドで設定します。第1引数にアドレスを、第2引数にその処理を書きます。
getメソッドでアドレスと処理を割り当てているというのがルート情報設定の基本です。
#トップページのルート情報
では具体的に`web.php`の中身を見ていきます。

```php5:web.php
<?php
Route::get('/', function () {
    return view('welcome');
});

```

>出典： [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


`/`はトップページを表します。
そして`view`という関数で戻り地を設定しています。

```php5
view(テンプレート名);
```
`view`は指定したテンプレートファイをロードし、レンダリング(HTML出力)して返します。

##welcomeテンプレートについて
`return view('welcome');`で**welcome.blade.php**というテンプレートファイツをレンダリングして表示します。
**welcome.blade.php**は「resourceas」フォルダの「views」フォルダにあります。

```php5:welcome.blade.php
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>

        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">

        <!-- Styles -->
        <!-- 省略 -->
    </head>
    <body>
        <div class="flex-center position-ref full-height">
            @if (Route::has('login'))
                <div class="top-right links">
                    @auth
                        <a href="{{ url('/home') }}">Home</a>
                    @else
                        <a href="{{ route('login') }}">Login</a>

                        @if (Route::has('register'))
                            <a href="{{ route('register') }}">Register</a>
                        @endif
                    @endauth
                </div>
            @endif

            <div class="content">
                <div class="title m-b-md">
                    Laravel
                </div>

                <div class="links">
                  <!-- 省略 -->
                </div>
            </div>
        </div>
    </body>
</html>

```

>出典： [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


中身を見てみると**@で始まる文**があります。
これはHTMLでもなくPHPでもありません。
これは**Blade**というLaraveに組み込まれているテンプレートエンジンを使って書かれたソースコードです。

Laravelでは普通にPHPでHTMLを書くよりもBladeを使ったほうが遥かに多いです。
ここでは「views」フォルダ7日にあテンプレートファイルが用意され、それをview関数で読み込んで表示しているという仕組みを理解しておきましょう。