ここではLaravelの構造が全然意味分かんない!controllerって何?っていうあなた向けに、超初心者でも絶対に分かるように図入りでやさしくcontrollerについて解説していきます。
これを読めば、Laravelのコントローラーがなんなのかがバッチリ分かるようになりますよ!
LaravelのController.phpとは何なのか?
まず、具体的な話をすると、
Laravelプロジェクト\app\Http\Controllersフォルダに入っているXxxController.phpファイル達がLaravelのコントローラーです。
Controller.phpとは、データベースから必要な情報を引き出したり、
逆にデータベースに投稿を保存したりするPHPファイルです。
つまり、コントローラーさんはデータベースっていう本棚から本を出し入れする人なんだ。
例えば、「post321用の投稿をください」ってコントローラーさんに頼めば、データベースからpost321のデータを引っ張り出してきてくれるわけ。
逆に、「新しい記事を書いたので、post512として保管してください」って頼めば、post512としてデータベースに新たに保管してくれるんだ。
上の図のように、コントローラーは、URLに合った記事をデータベースから取り出し、ブレードに渡すのが仕事のファイルです。
また、サイトに投稿があった時に、その文章をデータベースに保存するのも、コントローラーがやっています。
Controllerがアクセスするデータベースとは?
通常レンタルサーバーにはMySQLというシステムで作られたデータベースが入ってます。
このPhpMyAdminというツールにログインする事で、データベースの中に入った情報を見る事ができます。
その中から必要なものだけ引っ張りだすのがControllerなんだ。
ブログの記事ページなら、記事タイトルと記事本文、投稿日など、そのページに必要なものをデータベースから引き出すための命令をコントローラーには書くって事。
そして引き出したデータを、blade.phpに渡す事でサイトが表示されるって事なんだ。
→Laravelのblade.phpとは?普通の.phpと何が違う?初心者必須の知識!
→Laravel(PHP)におけるデータベース(SQL)とは?初心者でもよく分かる図と例でやさしく解説。
ControllerとBladeをなぜ分ける必要がある?
なぜController.phpとblade.phpの2つに分けるのかというと、
- その方が管理が楽なため
- セキュリティを高めるため
という2つの大きな理由があります。
最初はたしかに1ページにすべての情報があった方が分かりやすく感じると思います。ただ、情報が増えてくると、どこに何があるのかが非常に分かりづらくなるため分けているというのがまず1つです。
そしてもう一つ大事な事。セキュリティのためです。
blade.phpは実際にブラウザに表示するためのphpファイルです。
そのphpファイルにデータベースに関する情報を直書きしてしまうと、ブラウザのソース画面から情報が漏れるリスクが高まります。
それこそ個人情報を扱っている場合はとても危険です。
なので、Controllerというブラウザからはアクセスできない領域でデータベース処理をした後に、必要な情報のみbladeに渡すという形になってるんです。
Controller.phpの作成方法
Controller.phpは、基本的にターミナル(コマンドプロンプト)からコマンドを入れる事で作ります。
コントローラーの作成手順
- コマンドプロンプト(shell)を立ち上げる
- Laravelプロジェクトフォルダまでcdコマンドで移動する。(Dドライブの場合は、D:と入力して移動)
- php artisan make:controller SampleController
まず、コマンドプロンプト(shell)を立ち上げます。
そして、ウィンドウからLaravelプロジェクトフォルダ(作ってるサイトのフォルダ)までのパスをコピーします。
そして、cd フォルダまでのパス を入力してEnter。上の画像なら、cd D:\website ですね。
あとフォルダを戻りたい時は、cd .. で1つ前に戻れるよ。
そして、最後に php artisan make:controller SampleController と入力しEnterです。
*Sampleの部分は、分かりやすい名前に変更して使います。プロフィールページ用ならProfileController のようにです。
Laravelプロジェクト→app→Http→Controllers というフォルダを開けると、
今作ったControllerが出来ているはずです。
手動だと、書き換え忘れや、書き間違いが起こりやすいからコマンドの方が間違いない。あと、Resourceコントローラーのような特殊なコントローラーを作る場合は、コマンドで作らないと、Routesに反映されなかったりでうまく動かない可能性があるよ。
→Laravelをレンタルサーバーにインストールのやり方3パターンを初心者向けに解説。
Laravelのcontroller.phpの見方、書き方
では、今作ったSampleController.phpの中身を見ながら、解説していきましょう。下の画像を見ながら読んでください。
まず、一番上に<?phpというタグがありますよね。というのも、Controllerはphpで動きます。なので、<?php という開始タグが一番上に付く事で、次の行からは、phpのタグが使えるようになります。これ消しちゃうと動かなくなるので注意です。
次の行のnamespaceには、controllerが入ってるフォルダまでのパスが書かれてます。これも基本いじりません。
useに関しては、この後の行でパスを省略するために書きます。例えば、赤枠の1行目には、Requestという文字がありますよね。これ、本当は、(Illuminate\Http\Request $request)って書く必要があるんですが、useの欄にパスを書く事で、その後はパスを省略して書けるんです。
そして、class SampleController extends Controller{} のカッコ内に実際の命令文を書いていきます。
基本的な型としては、赤枠内のように、public function nantoka (Request $request){} と書き、その中にデータベースから何を呼び出すか、そしてどのblade.phpを呼び出すかを書きます。
15行目がデータベースを呼び出す文なのですが、下の記事で書き方を解説してます。
→入門!laravelでデータベースから取得。クエリの書き方(エロクワント版)
→Laravel6チュートリアル初心者向け:データベースの値を取得して表示してみよう
17行目のreturn view ('categorypage')という部分は、categorypage.blade.phpを表示するという意味です。withの部分は、データベースで呼び出した内容をブレードに送ってます。
Laravelのnamespace(名前空間)とは?超初心者向けにシンプルに分かりやすく解説
Laravelのuseとは?超初心者向けにシンプルに分かりやすく解説
実際にコントローラーとルートを使ってブレードを表示するチュートリアルが以下の記事であるので、一度やってみると、ちゃんとLaravelの構造が理解できますよ。
Laravelのroutes(web.php)とは?超初心者向けに図解と実例でやさしく解説!