ウェブログラム

実践しながらじっくり学ぶ、Webプログラム習得サイトです。自作サービスの公開までWeb開発を実践していきましょう!

Webrogram

自分のオリジナルサービスを作って運営しよう!

【Laravel5.6 controller】コントローラを作成しルータから呼び出してみる

Laravel入門記事一覧はこちら webrogram.hatenadiary.jp

さて、今回はコントローラについて見ていきましょう。 コントローラはこの後の記事で紹介するビューとモデルとの中間役になるものです。

ざっくり言うと、ルーティングにより「このデータがほしい!」というリクエストが飛んできたとします。 そしてコントローはモデルを操作して、該当のデータを取り出し、ビューへと返します。

最初はこういったざっくりとした理解で良いです。実際に使っていくことで「なるほど!」となっていきます。

環境

  • PHP7.2.5
  • Laravel5.6
  • CentOS7

対象読者 - Laravelの環境構築が完了している - 192.168.33.10:8000で仮想マシンを立ち上げている(ここが分からなければ、前の記事を見てください〜) - フレームワーク超初心者 - ルーティングをさらっと理解している

コントローラを実際に作成する

コントローラのファイルは特殊なコマンドを実行することで、作成できるのですが、今回は実際に書いてみましょう。

コントローラのファイルは

app/Http/Controllers

に記述していきます。

今回は、使用場面の多いユーザを例にとってコントローラを作成します。

Controllersディレクトリ内に、UserController.phpというファイルを作成します。以下のように記述してみてください。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        dump("hello webrogram");
    }
}

indexという関数がありますが、Laravelではこの関数をアクションと言ったりします。 このindexアクションは「文字を表示する」ということだけしています。

これでコントローラの作成は終わりです。次は実際に作成したコントローラのアクションをルーティングによって呼び出してみましょう。

ルーティングで作成したコントローラを呼び出してみる

ルーティングでコントローラのアクションを呼び出すわけですが、少しだけルーティングの記述方法が変わります。

アクションの呼び出し

routes/web.php

を以下のように記述してください。

<?php

Route::get('/users', 'UserController@index');

これだけです。 説明すると、ブラウザに/usersとアクセスすると、先程作成したUserController.php内のindexアクションが呼び出されます。 indexアクションには文字を表示するだけのプログラムを書いていたので、ブラウザ上は以下のように表示されています。

f:id:iku8:20180529215134p:plain

アクションへURLの値を渡してみる

ルーティングの章で行った、URLのPATHの値を表示するプログラムを覚えていますか?(https://webrogram.hatenadiary.jp/

この手のプログラムはかなりよく使うので習得しておきましょう。

流れとしては、URLのPATHの値をルーティングでキャッチして、その値をコントローラに渡します。 その後、コントローラでその値を表示してみます。

ルーティングはこんな感じで

<?php

Route::get('/users{name}', 'UserController@index');

コントローラはこのようになります。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index($name)
    {
        dump("hello webrogram $name");
    }
}

ポイントは、indexアクションの引数にnameが渡されているところです。 $nameとして定義していますが、普通の関数と同じように、変数名は自由にしてOKです。特に決まりはありません。

なので、ルーティングとコントローラを以下のように書き換えても、全く同じ結果がブラウザに表示されます。

ルーティング

<?php

Route::get('/users{nickname}', 'UserController@index');

コントローラ

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index($namaedayo)
    {
        dump("hello webrogram $namaedayo");
    }
}

ルーティングもコントローラも変数名は自由に決められますが、統一しておくのが分かりやすいです。今回の場合だと両方nameにしておくのが吉ですね。

アクションにURLパラメータを渡してみる

次はURLパラメータを取得して表示してみましょう。 こちらの処理も相当な頻度で使うの、しっかり習得しておいてください!

ルーティングはこうです

<?php

Route::get('/users', 'UserController@index');

コントローラは以下の通りです。 ルーティングの時にも使用したRequestというものが出てきます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
  public function index(Request $req)
  {
      dump("hello webrogram $req->name");
    }
}

これでブラウザのURLのケツに下を入力してやります。

?name=minamino

で、ブラウザにアクセスすると

f:id:iku8:20180529220724p:plain

nameというパラメータを受け取って、表示しているのですね。 今回$req->nameという形で使用していますが、これを$req->nicknameとかにすると、表示されません。 $req->nicknameとして表示したいのであれば、ブラウザ上で?=nameを?=nicknameに変えないといけません。

ここは、先程の「URLのPAHTの値を取得」とは異なる点ですね。

まとめ

これでなんとなく、ルーティングとコントローラの振り分け処理の流れが分かったのではないでしょうか? ルーティングとコントローラは対なところがあるので、まとめて覚えておくのが良いでしょう。

今回書いたプログラムは基礎の基礎です。まだまだ奥深い手法がゴロゴロしていますので、なれたらいろいろ触っていきましょう。

次回はビューを実践していきます。 ビューを覚えることで、一気にWebアプリケーションを使っている気持ちになるかもしれません。次も楽しんでいきましょう。

この記事でよくわからないところ、間違っているところあればコメントよろしくお願いします。