Laravelチュートリアル2 – ルーティングを理解しよう

Laravel

前回までの内容

前回のチュートリアルで環境構築後、Laravelトップページが表示されるところまで進めることができました。

今回は、Laravelのルーティングを学習していきます。

ルーティングの基本

ルーティングとは

IT用語でルーティングというと、ルータなどに関連したネットワーク系の単語としても使用されますが、ここで言うルーティングとは一般的にMVCフレームワークを利用してプログラミングを行う際によく登場するルーティングの方を指します。

ルーティングとは、ブラウザから入力するURLとフレームワークの各処理の対応を紐付けるものになります。

例えば、ブラウザへhttp://example.com/pet/showと入力すると、ペット情報を取得して表示するのようなURLと処理の対応です。

言葉で説明してもイマイチわからないと思うので、早速Laravelでルーティングの処理を書いていきましょう!

MVCフレームワークとは、Model(M)View(V)Controller(C)のアーキテクチャで作成されたフレームワークです。

Model(モデル)、View(ビュー)、Controller(コントローラー)というそれぞれの役割に従ってプログラミングをしていきます

実際にルーティングしてみよう

Laravelは、web.phpというルーティングファイルでURLと処理の対応を決めます。

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

Laravelインストール直後のルーティングファイルは以下のようになっていると思います。

routes/web.php

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

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

これは、http://127.0.0.1:8000のURLへアクセスが来た時(/へアクセスが来た時)に、welcomeというHTMLを表示しますよということです。

そして実際に表示されているHTMLはこれです。

resources/views/welcome.blade.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>Welcome!</title>
    <style>
        body { background: #F5F5F5; font: 18px/1.5 sans-serif; }
        h1, h2 { line-height: 1.2; margin: 0 0 .5em; }
        h1 { font-size: 36px; }
        h2 { font-size: 21px; margin-bottom: 1em; }
        p { margin: 0 0 1em 0; }
        a { color: #0000F0; }
        a:hover { text-decoration: none; }
        code { background: #F5F5F5; max-width: 100px; padding: 2px 6px; word-wrap: break-word; }
        #wrapper { background: #FFF; margin: 1em auto; max-width: 800px; width: 95%; }
        #container { padding: 2em; }
        #welcome, #status { margin-bottom: 2em; }
        #welcome h1 span { display: block; font-size: 75%; }
        #comment { font-size: 14px; text-align: center; color: #777777; background: #FEFFEA; padding: 10px; }
        #comment p { margin-bottom: 0; }
        #icon-status, #icon-book { float: left; height: 64px; margin-right: 1em; margin-top: -4px; width: 64px; }
        #icon-book { display: none; }

        @media (min-width: 768px) {
            #wrapper { width: 80%; margin: 2em auto; }
            #icon-book { display: inline-block; }
            #status a, #next a { display: block; }

            @-webkit-keyframes fade-in { 0% { opacity: 0; } 100% { opacity: 1; } }
            @keyframes fade-in { 0% { opacity: 0; } 100% { opacity: 1; } }
            .sf-toolbar { opacity: 0; -webkit-animation: fade-in 1s .2s forwards; animation: fade-in 1s .2s forwards;}
        }
    </style>
</head>
<body>
<div id="wrapper">
    <div id="container">
        <div id="welcome">
            <h1><span>Welcome to</span> Symfony <?php echo $version; ?></h1>
        </div>

        <div id="status">
            <p>
                <svg id="icon-status" width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1671 566q0 40-28 68l-724 724-136 136q-28 28-68 28t-68-28l-136-136-362-362q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 295 656-657q28-28 68-28t68 28l136 136q28 28 28 68z" fill="#759E1A"/></svg>

                Your application is now ready. You can start working on it at:<br>
                <code><?php echo $baseDir; ?></code>
            </p>
        </div>

        <div id="next">
            <h2>What's next?</h2>
            <p>
                <svg id="icon-book" xmlns="http://www.w3.org/2000/svg" viewBox="-12.5 9 64 64"><path fill="#AAA" d="M6.8 40.8c2.4.8 4.5-.7 4.9-2.5.2-1.2-.3-2.1-1.3-3.2l-.8-.8c-.4-.5-.6-1.3-.2-1.9.4-.5.9-.8 1.8-.5 1.3.4 1.9 1.3 2.9 2.2-.4 1.4-.7 2.9-.9 4.2l-.2 1c-.7 4-1.3 6.2-2.7 7.5-.3.3-.7.5-1.3.6-.3 0-.4-.3-.4-.3 0-.3.2-.3.3-.4.2-.1.5-.3.4-.8 0-.7-.6-1.3-1.3-1.3-.6 0-1.4.6-1.4 1.7s1 1.9 2.4 1.8c.8 0 2.5-.3 4.2-2.5 2-2.5 2.5-5.4 2.9-7.4l.5-2.8c.3 0 .5.1.8.1 2.4.1 3.7-1.3 3.7-2.3 0-.6-.3-1.2-.9-1.2-.4 0-.8.3-1 .8-.1.6.8 1.1.1 1.5-.5.3-1.4.6-2.7.4l.3-1.3c.5-2.6 1-5.7 3.2-5.8.2 0 .8 0 .8.4 0 .2 0 .2-.2.5s-.3.4-.2.7c0 .7.5 1.1 1.2 1.1.9 0 1.2-1 1.2-1.4 0-1.2-1.2-1.8-2.6-1.8-1.5.1-2.8.9-3.7 2.1-1.1 1.3-1.8 2.9-2.3 4.5-.9-.8-1.6-1.8-3.1-2.3-1.1-.7-2.3-.5-3.4.3-.5.4-.8 1-1 1.6-.4 1.5.4 2.9.8 3.4l.9 1c.2.2.6.8.4 1.5-.3.8-1.2 1.3-2.1 1-.4-.2-1-.5-.9-.9.1-.2.2-.3.3-.5s.1-.3.1-.3c.2-.6-.1-1.4-.7-1.6-.6-.2-1.2 0-1.3.8 0 .7.4 2.3 2.5 3.1zm39.3-19.9c0-4.2-3.2-7.5-7.1-7.5h-3.8c-.4-2.6-2.5-4.4-5-4.4l-32.5.1c-2.8.1-4.9 2.4-4.9 5.4l.2 44.1c0 4.8 8.1 13.9 11.6 14.1l34.7-.1c3.9 0 7-3.4 7-7.6l-.2-44.1zM-.3 36.4c0-8.6 6.5-15.6 14.5-15.6s14.5 7 14.5 15.6S22.1 52 14.2 52C6.1 52-.3 45-.3 36.4zm42.4 28.7c0 1.8-1.5 3.1-3.1 3.1H4.6c-.7 0-3-1.8-4.5-4.4h30.4c2.8 0 5-2.4 5-5.4V17.9h3.7c1.6 0 2.9 1.4 2.9 3.1v44.1z"/></svg>

                Read the documentation to learn
                <a href="https://symfony.com/doc/<?php echo $docVersion; ?>/page_creation.html">
                    How to create your first page in Symfony
                </a>
            </p>
        </div>
    </div>
    <div id="comment">
        <p>
            You're seeing this page because debug mode is enabled and you haven't configured any homepage URL.
        </p>
    </div>
</div>
</body>
</html>

拡張子が.htmlではなく、.blade.phpとなっていますね。

これはLaravelのテンプレートエンジンであるBlade(ブレード)を使用しているためです。

Bladeの中身は基本的にはただのHTMLとなっていますが、Bladeで書くことによって、HTMLの中でfor分やif文など、その他色々な便利なLaravelに特化した記法を便利に使えるようになっているのです。

Blade自体についてはそこまで難しく考えず、ただちょっと便利なHTMLだと覚えておけば、最初は大丈夫です。

web.php内で使用しているview(‘welcome’)は、welcome.blade.phpの拡張子.blade.phpを省略します。

ルーティングを変更してみよう!

ルーティングの基本が理解できたところで、今度はルーティングを色々変更してみて理解を深めていきましょう!

web.phpの修正

このようにルーティング変えてみましょう!

//testに変更しています。

Route::get('/', function () {
↓
Route::get('/test', function () {

全体のroutes/web.phpはこんな感じになります。

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

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

変更したURLへアクセスしてみよう

http://127.0.0.1:8000のURLでは、ルーティングを変更したためアクセスできず、http://127.0.0.1:8000/testのURLでアクセスできるようになっているのがわかると思います!

以下のような画面が表示されればOKです。

このようにLaravelでは、ルーティングファイル(web.php)でURLと処理の対応を決めています!

コントローラーへルーティングしてみよう!

これまでは、URLに対応した処理をfunctionに任せていましたが、今度はコントローラーへ任せたいと思います。

今の段階ではとりあえず、コントローラはユーザの操作からルーティングとビュー結びつける仲介役であるという感じで理解しておけば良いでしょう。
※現段階ではコントローラーとは?などあまり深く調べたりすることをオススメしません(混乱する可能性があるためです)。

web.phpの修正

routes/web.phpへ以下の記述を追記してコントローラーへルーティングするようにしてください。

Route::get('/sample', 'SampleController@index');

全体のweb.phpはこんな感じになります。

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

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

Route::get('/sample', 'SampleController@index');

コントローラーの作成

新しく端末(Windowsの方はcmd)を開き、Laravelプロジェクト(artisanファイルがあるところ)へ移動後、以下のコマンド打って、コントローラーを作成してください。

php artisan make:controller SampleController

上記のコマンドがエラーなく実行できていれば、app/Http/Controllers/SampleController.phpというファイルが生成されます。

コントローラーに処理を記述しよう

生成したSampleControllerは初期状態で以下のようになっていると思います。

app/Http/Controllers/SampleController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SampleController extends Controller
{
    //
}

ここに、HTMLを表示するための処理を加えていきましょう!

以下のように、処理を追加してください!

app/Http/Controllers/SampleController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SampleController extends Controller
{
    public function index()
    {
        return view('sample');
    }
}

ブレードを作成しよう

次に表示するためのHTMLを作成しましょう!

Laravelでは、resources/views/配下にHTMLを配置します。

記事の冒頭でも説明した通り、Laravelではブレードというテンプレートエンジンを使用して、HTMLを書いていくため、拡張子は、.blade.phpにします。

HTMLの中身は表示確認のためだけなので以下のように簡単な記述で問題ありません。

以下のsample.blade.phpを作成してください。

resources/views/sample.blade.php

<h2>sample</h2>

表示結果

http://127.0.0.1:8000/sampleへアクセスして以下のような画面が表示されれば成功です。

ここまでで、URLでアクセス → ルーティングファイル(web.php) → コントローラー(SampleController) → ビュー(sample.blade.php) までの流れがなんとなくわかったかと思います。

Laravelフレームワークを使用した基本的な処理の流れは、このようになりますのでしっかりと理解しておきましょう!

次はコントローラーで簡単な処理をしてみたり、よりプログラミングらしいことをやっていきましょう!

次のチュートリアルは、こちらに記載しているので引き続きLaravelの学習を進めていってください!

またルーティングをもう少し深堀りしたいという方は、Laravelの公式ドキュメントがオススメです。

公式ドキュメントは小難しく初学者の方だと読みにくいものが多いですが、Laravelの公式ドキュメントはとても親切でわかりやすいので、是非読んでみましょう!

筆者オススメの関連商品

コメント