カテゴリー
サインイン 新規登録

間違いや改善の指摘

内容の技術的な誤り・誤字脱字やミスのご報告・解説やトピックの追記/改善のご要望は教材をさらに良くしていく上でとても貴重なご意見になります。

少しでも気になった点があれば、ご遠慮なく投稿いただけると幸いです🙏

実際には誤りではなく勘違いであっても、ご報告いただけることで教材のブラッシュアップにつながります。

質問ポリシー①

教材受講者みなさんのスムーズな問題解決のために、心がけていただきたいことがあります。

教材の内容に関する質問を投稿しましょう

教材の内容に関係のない質問や教材とは異なる環境・バージョンで進めている場合のエラーなど、教材に関係しない質問は推奨していないため回答できない場合がございます。

その場合、teratailなどの外部サイトを利用して質問することをおすすめします。教材の誤字脱字や追記・改善の要望は「文章の間違いや改善点の指摘」からお願いします。

1-3

コントローラーの作成

前パートでは、URLと処理内容のひも付けを行いました。

この処理内容をもう一段詳しく定義するのがコントローラーになります。

(なお、処理の内容によっては、さらに別の適したクラスへ処理を引き渡すといったことを行うのもコントローラーの役割です)

Laravelでは、コントローラーをapp/Http/Controllersディレクトリに作成します。

本パートではコントローラーを新規に作り、さらに記事一覧のビュー(画面の見た目)を呼び出すindexアクションメソッドを定義します。

なお、本来は記事一覧の情報をデータベースの記事テーブルから取得してビューに渡す必要がありますが、本パートの段階ではダミーの固定データを渡すようにします。

1. コマンドでのコントローラーの新規作成

Laravelでは、コマンドでコントローラーのひな形を作成することができます。

laradockディレクトリで、以下のコマンドを入力してください。

Copied!
$ docker-compose exec workspace php artisan make:controller ArticleController

以上により、app/Http/ControllersディレクトリにArticleController.phpが作成されます。

なお、今回実行したコマンドの先頭に付いているdocker-compose exec workspaceの意味は、

  • docker-composeコマンドで起動中のworkspaceという名前のDockerコンテナ(仮想環境)の中で、続くコマンド(php artisan...)を実行してください

といったものになります。

Laravelでコントローラーのひな形を作成するためのコマンドそのものはphp artisan make:controller コントローラー名となります。

今回も含め、今後登場するコマンドの先頭にdocker-compose exec...が付いているのは、本教材がDocker Composeという仕組みを使って開発環境を構築しているためなので、その点についてご注意ください。

2. コントローラーの編集

次に、laravel/app/Http/Controllers/ArticleController.phpを以下の内容に編集してください。

Copied!
. └──laravel └── app └── Http └── Controllers    └── ArticleController.php
laravel/app/Http/Controllers/ArticleController.php
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
Copied!
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ArticleController extends Controller { //==========ここから追加========== public function index() { // ダミーデータ $articles = [ (object) [ 'id' => 1, 'title' => 'タイトル1', 'body' => '本文1', 'created_at' => now(), 'user' => (object) [ 'id' => 1, 'name' => 'ユーザー名1', ], ], (object) [ 'id' => 2, 'title' => 'タイトル2', 'body' => '本文2', 'created_at' => now(), 'user' => (object) [ 'id' => 2, 'name' => 'ユーザー名2', ], ], (object) [ 'id' => 3, 'title' => 'タイトル3', 'body' => '本文3', 'created_at' => now(), 'user' => (object) [ 'id' => 3, 'name' => 'ユーザー名3', ], ], ]; return view('articles.index', ['articles' => $articles]); } //==========ここまで追加========== }

前パートでは、以下のようにルーティングを定義しました。

php
123
Copied!
<?php Route::get('/', 'ArticleController@index');

このArticleController@indexindexの部分が、ArticleController.phpindexアクションメソッドに対応します。

ダミーデータ

本来、indexアクションメソッドでは記事情報をデータベースのarticlesテーブル(記事テーブル)から読み込む必要があります。

ただし、まだarticlesテーブルを作成していないので、この段階ではarticlesテーブルの内容を模したデータを変数$articlesに代入しています。

php
12345678910111213
Copied!
// ダミーデータ $articles = [ (object) [ 'id' => 1, 'title' => 'タイトル1', 'body' => '本文1', 'created_at' => now(), 'user' => (object) [ 'id' => 1, 'name' => 'ユーザー名1', ], ], // 以下略

(object)は、型キャストと呼ばれるものです。

ここでは、配列の手前に(object)と記述することで、配列がオブジェクト型に変換されています。

データベースのテーブルから読み込んだデータは、Laravelではオブジェクト型として扱われるので、このような型変換を行なっています。

本パートの段階では、PHPには型キャストという仕組みがあるということだけ頭の片隅に入れておいてください。

viewメソッド

indexアクションメソッドでは、以下の通り、viewメソッドの結果をアクセス元に返しています。

php
1
Copied!
return view('articles.index', ['articles' => $articles]);

viewメソッドの第一引数には、ビューファイル名を渡します。

'articles.index'とすることで、resources/views/articlesディレクトリにある、indexという名前のビューファイルが表示されます。

(現時点ではresources/viewsディレクトリには、articlesディレクトリもindexというビューファイルも作成していないので、次のパートで作成します)

viewメソッドの第二引数には、ビューファイルに渡す変数の名称と、その変数の値を連想配列形式で指定します。

ここで、'articles'というキーを定義することで、ビューファイル側で$articlesという変数が使用できるようになります。

ビューファイル側で使う$articles変数の中身の値は、このindexアクションメソッドで定義したダミーデータ$articlesの値となります。

以上で、コントローラーの作成は完了です。

次はビューファイルを作成します。

viewメソッドの補足

本教材では、ビューに渡す変数を連想配列形式でviewメソッドの第二引数に渡しています。

Laravelでは、それ以外のコードの書き方でも変数をビューに渡すことができます。

ひとつめは、withメソッドを使う方法です。

php
1
Copied!
return view('articles.index')->with(['articles' => $articles]);

viewメソッドにwithメソッドを繋げて、withメソッドの引数にビューファイルに渡す変数の名称と、その変数の値を連想配列形式を指定します。

もうひとつは、compact関数を使う方法です。

php
1
Copied!
return view('articles.index', compact('articles'));

viewメソッドの第二引数に、compact関数を使った結果を渡しています。

compact関数を使うと、変数を連想配列形式で記述しなくて良いので、コードの量が減ってスッキリします。

これらのどれが正しいということはありませんが、本教材とは異なる書き方に遭遇しても戸惑わないよう、知識として覚えておいてもらえればと思います。