Laravelのインストールやディレクトリ構造、ライフサイクルまである程度理解したところで、新しいページを作成して表示までやってみましょう。

LaravelでHelloWorld

3年以上前に更新されました。情報が古い可能性があります。
更新日 : 2020年02月04日

Laravelのインストールやディレクトリ構造、ライフサイクルまである程度理解したところで、新しいページを作成して表示までやってみましょう。

HelloWorldを表示する

Laravelのインストールが完了した時点で、Laravelのウエルカムページが表示されました。今回は新しいURLの生成と、そこから処理が行われるコントローラー、ビューの作成を行い、HelloWorldと表示させて見ましょう。

web.phpの修正

まずは新しくページを作成するために、URLを決めてルーティング設定を行います。
ルーティング設定のその他の様々な指定方法はhttps://readouble.com/laravel/6.x/ja/routing.htmlを見てみましょう。

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');
});

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

追記したのは最後の行のRoute::get('/hello-world', 'HelloController@index');のみです。

これで、「GETメソッド用のURL/hello-worldを作成し、そのリクエストをHelloControllerindexメソッドで処理する」という意味になります。
HellowContorllerは次の項で作成します。

ルーティング設定後のURLについて

このweb.phpでのURL定義では、Laravelの公開ディレクトリであるpublicフォルダ以降のURLパスとなります。

例えば、筆者であればPC上のデスクトップにあるhtdocsをMAMPのドキュメントルートに設定しています。Laravelはhtdocs/PHP/laravel-testにインストールされた状態です。

今回作成したhello-worldというルーティングでは、http://localhost:8888/PHP/laravel-test/public/hello-worldというURLのページを作成したことになります。

仮に、筆者のWEBサーバーのドキュメントルートをデスクトップ/htdocs/PHP/laravel-test/publicと設定すれば、http://localhost:8888/hello-woldでアクセスが可能になります。

次にHelloControllerを作成していきましょう。

コントローラーの作成

先程ルーティングで設定したHelloControllerクラスを作成していきます。
コントローラーのその他様々な使い方に関してはhttps://readouble.com/laravel/6.x/ja/controllers.htmlを読んでみましょう。

app/Http/ControllersディレクトリにHelloController.phpを作成し、以下のコードを記載しておきましょう。

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

class HelloController extends Controller {

	public function index() {
		// 本来はModelからデータを取得する
		$data = array('title' => 'Hello World!!');
		return view('hello', $data);
	}
}

まず、Laravelのコントローラークラスは、app/Http/Controllers/Controller.phpにあるControllerクラスを継承(extends)します。

また、今回はControllerクラスと作成したHelloControllerクラスが同一ディレクトリに存在するため、use App\Http\Controllers\Controller;はあってもなくても構いません。

indexメソッドの中身を確認していきましょう。

今回はリクエストからデータを受け取る必要がないため、引数は必要ありません
リクエスト時にフォームデータなどが存在する場合などは適宜引数を追加していきます。
フォームデータなどの受け取りについては次の記事で解説します。

次に$data = array('title' => 'Hello World!!');です。
この部分はただの連想配列データを$data変数に代入しているだけです。

これはビューへ渡すデータを作成しています。
本来はこの部分ではMVCで言うところのModelからデータを取得して、ビューに渡したいデータを取得します。今回はModelの解説は行わないためコントローラーでテスト用にデータを作成しました。

最後にreturn view('hello', $data);です。

いきなりview関数が登場していますが、これはLaravelフレームワークでグローバルで(フレームワーク内であればどこでも)使用できる機能の1つです。Laravelではこれらのグローバルで使用できる関数をヘルパと呼んでいます。

その他ヘルパに関してはhttps://readouble.com/laravel/6.x/ja/helpers.htmlに日本語で記載されています。

このview関数の仕様を確認してみます。

view(ビューファイル名, ビューに渡したいデータ配列) : Viewインスタンス

本当は第三引数までありますが、使わないため省略しています。

第一引数にはビューファイル名を記載します。hello.blade.phpというビューファイル名であれば、helloとだけ指定し、.blade.phpは省略します。

第二引数にはビューに渡したいデータを連想配列で指定します。今回は連想配列が格納されている$dataを指定していますね。連想配列であることが必須なので注意しましょう。後ほど理由がわかります。

これでコントローラーは完了です。コントローラーのルーティングから実行されるメソッドでは基本的にViewインスタンスを返します。ViewインスタンスもLaravel特有のクラスから生成されるオブジェクトです。Viewインスタンスの内容を理解する必要はありません。

最後にビューファイルとして指定されているhello.blade.phpファイルを作成していきましょう。

ビューの作成

コントローラーでビューの指定をしているので、最後にビューファイルを作成しましょう。
ビューの様々な機能に関してはhttps://readouble.com/laravel/6.x/ja/views.htmlこちらを参考にしてください。

LaravelではBladeと呼ばれるビュー専用のテンプレートエンジンを利用しています。Bladeテンプレートに関してはhttps://readouble.com/laravel/6.x/ja/blade.htmlこちらを確認してください。

テンプレートエンジンとは、特定の記述方法をテンプレートとして採用し、自動でコードに変換してくれる便利な機能です。

早速ビューファイルを作成していきますが、せっかくなのでインストール時に使用されているビューファイルをそのまま利用してしまいましょう。

resources/viewsディレクトリに存在するLaravelのトップページで表示されたビューファイル(welcome.blade.php)をhello.blade.phpとしてコピーします。
以降はhello.blade.phpを編集します。

PHPファイルに以下のような「Laravel」と表示している部分があるので、その部分だけ変更します。

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

この部分を下記のように変更しましょう。

<div class="title m-b-md">
    {{ $title }}
</div>

$title変数を表示する指定を行っています。$title変数がいきなり出てきているように思うかもしれませんが、これはコントローラから送られてきた連想配列のキー名です(array('title' => 'Hello World!!')title)。

このように連想配列のキーがビューでは変数として利用可能になっています。
もちろん今回の$titleの変数にはHello World!!という文字列のデータが格納されています。

また、{{ $title }}と書くだけで、テンプレートエンジンが以下のようなPHPコードに変換します。
<?php echo e($title); ?>

e関数はLaravelで定義されているHTMLエスケープするためのヘルパ関数です。つまり{{ $title }}と書くだけでHTMLエスケープも自動でやってくれます。テンプレートエンジン様様です。

これですべて完了です。実際に作成したURLでアクセスしてみましょう。

実際にブラウザでアクセスしてみる

MAMPで実行していて、ドキュメントルートがLaravelのpublicディレクトリでない場合には、ドキュメントルートからたどってLaravelのpublicフォルダ以降からルーティングで定義したURLパスを指定します。

筆者の場合にはhttp://localhost:8888/PHP/laravel-test/public/hello-woldというURLになります。

コントローラーにて設定した文字列が大きく表示されているはずです。

うまく表示できていれば完了になります。

まとめ

今回は入門としてHello Worldと表示してみました。

ルーティング→コントローラー→モデルからデータ取得→ビューへデータを渡す→ビューの表示という流れはどんなページでもほぼ変わりありません。

この基本が理解できれば様々なページを作成できます。

モデルからデータを取得する部分に関してはこちらの記事で解説しています。