【Laravel】 Controller、View、ルーティングを一通り用意しよう

Laravelでページを表示するためには、まずはController、View、ルーティングを用意する必要があります。まずはこれらを一通り用意してみて、実際にページを追加してみます。

Viewの作成

まずはViewを作成しましょう。Controllerを先に作成しても問題ないですが、ControllerからViewを指定するため、先にViewがあるとわかりやすいかな、という程度です。

Viewは、resources/views内に作成します。拡張子はPHPなのでPHPのコードが動くのですが、実際にPHPのコードを書くことは殆どありません。MVCにおいて、Viewは表示に徹し、ロジックを書くことは非推奨であるためです。Controllerから渡された値を表示する際には、テンプレートエンジンの構文を使うことがほとんどです。

本来は先にLayoutを用意すべきですが、とりあえず動くものを用意します。

resources/views/index.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>hoge</p>
</body>
</html>

Controllerの作成

Controllerの作成では、普通にファイルを作成するのと、php artisanを使う方法の2つあります。

ファイルはapp/Http/Controllers内に作成されます。

artisanは、Laravelに関するCLIのコマンドを使うためのものです。

artisanする

コントローラを作成するコマンドがあるので、それを使って作成します。コントローラ名は何でも良いですが、XXControllerのような名前が良いです。

php artisan make:controller HelloController

# 子孫ディレクトリに入れたい場合
php artisan make:controller Hoge\\HelloController

このコマンドはapp/Http/Controllersにファイルを作成しているだけです。そのため、次のように手動で作成しても大きな問題はありません。

手動でファイルを作る

タイプミスやコピペ時の変更漏れなどを防ぐためにartisanの方を推奨しますが、手動で作成する場合はテンプレのコピペで作成で十分です。

app/Http/Controllers/HelloController.php
<?php

namespace App\Http\Controllers;

// コントローラ名変え忘れ注意
class HelloController extends Controller
{
    // ...
}

ビューを取得するための実装をする

コントローラを作成したら、とりあえず簡単な実装をしましょう。ひとまずViewを呼び出すコードを入れます。

app/Http/Controllers/HelloController.php
// ...
class HelloController extends Controller
{
    public function index ()
    {
        return view('index');
    }
}

view関数は、引数に入れたviewをresources/views/から探してくる関数です。

これで、resources/views/index.blade.phpを呼び出すことができます。

子孫ディレクトリを指定する場合は、view('hoge.fuga.index')のようドット区切りで指定します。この場合、resources/views/hoge/fuga/index.blade.phpが対象になります。

ルーティングを作る

URLでアクセスしたときに、そのURLにControllerを対応させるようにルーティングを作る必要があります。

Route::HTTPメソッド('パス', [コントローラのクラス, メソッド名])のようにします。コントローラのクラスは、完全修飾名 (namespaceを含めた名前) である必要があります。

ルーティングはroutesフォルダ内にありますが、通常はweb.phpで良いです。

routes/web.php
// ...

// getメソッドで https://.../hello-world にアクセスすると、HelloControllerのindexメソッドを呼び出す
Route::get('/hello-world', [App\Http\Controllers\HelloController::class, 'index']);
// または
Route::get('/hello-world', 'App\Http\Controllers\HelloController@index');

上の例のように設定方法は2つありますが、前者をおすすめします。前者の場合、クラス名でF12を押す(Go To Definition)と、パッとコントローラのコードに飛べるためです。

クラス名が長ったらしいので、ルートファイルの最初の方にuse App\Http\Controllers\SampleController;のように、先にuseしておくのもありです。

ルートを更新したときや、うまく反映されないと思ったら、php artisan optimizeすると改善する場合があります。

optimizeは各種キャッシュのクリアを行うものです。

これで準備が整いました。早速http://localhost/hello-worldにアクセスして表示されるか試してみましょう!

静的ページの場合

もしサーバ側の値を使わないような静的ページの場合、コントローラの実装を省略できます。

コントローラにreturn view(...);と書いていたのを直接ルート側に書くだけです。

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

まとめ

ページを新規追加するには、ビューの作成、ルーティングの作成、コントローラのメソッド作成を行う必要があります。

とりあえずページを追加できたら、早速コントローラから値を渡してみましょう。

laravel add page thumb

役に立ったらシェアしよう!