これからLaravelを学習していく上で必須となる機能をご紹介します。
業務でLaravelを使うようになった!
転職活動用にポートフォリオを作成したい!
という方などこれからLaravelを学ばれる方はぜひ参考にしてください。
PHPエンジニアを目指すまでのロードマップはこちら↓
押さえておきたい機能
- ルーティング
- コントローラー
- モデル
- ビュー
- リクエスト
- レスポンス
- バリデーション
- ログイン(Laravel Breeze)
- マイグレーション
- シーダー
- クエリビルダ
- Eloquent
ルーティング
ルーティングとは、一言で言うと、「URLのパスの設定」です。
あるURLにアクセスしたら指定の画面表示や処理を実行するように制御する機能です。
例えば、この画面のURLのパスは/article/laravel-road-mapとなっていますが、このパスにアクセスされたら「Laravelを学習する上で押さえておきたい機能」という記事を表示させる、という制御を行なっています。
Laravelのルーティングではパスのルールを記述していきます。
// web.php
Route::get('/article/laravel-road-map', [App\Http\Controllers\ArticleController::class, 'article'])->name('article');
コントローラー
コントローラーの役目は処理の流れの制御です。リクエスト情報があれば受け取り、プログラム処理を実行し、レスポンスを返します。
class ArticleController extends Controller
{
/**
* 記事を返す
*/
public function article(Request $request)
{
$article = Article::find($request->id);
return view('article', compact('article'));
}
}
モデル
モデルはデータベースのテーブルと関連してテーブルの操作や取得したデータの処理などを行います。
上のコードの例だとコントローラー内でArticleというモデルが使われており、findメソッドで指定したidのレコードを取得しています。
ビュー
ビューはHTMLの描画をする役目です。コントローラーから変数などを受け取って、HTMLを動的に作ることができます。
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div>
{{-- タイトルの表示 --}}
<h1>{{ $article->title }}</h1>
{{-- 内容の表示 --}}
<div>{{ $article->content }}</div>
</div>
</body>
</html>
リクエスト
リクエストは画面で入力した情報をポストしたデータを受け取ったり、エラーチェックをする機能です。
下の例ではメソッドの引数にRequestクラスという形でリクエスト情報が渡ってきます。
そのリクエスト情報から$request->idという形でidという情報を取得しています。
class ArticleController extends Controller
{
/**
* 記事を返す
*/
public function article(Request $request)
{
$article = Article::find($request->id);
return view('article', compact('article'));
}
}
レスポンス
レスポンスではレスポンスする形式や情報を設定してブラウザに返すことができます。
上記のコードの例ではコントローラーの最後でreturn view(‘article’, compact(‘article’));としていますが、これはarticle.blade.phpのビュー(HTML)を返すという意味になります。view以外にも、単に配列を返したり、CSVやPDFファイルを返したりと色々なレスポンスを指定することができます。
バリデーション
バリデーションはエラーチェックのことです。
下記のコードの例では、リクエスト情報として渡ってきたidが必須であり、かつ数字であることをチェックしています。
class ArticleController extends Controller
{
/**
* 記事を返す
*/
public function article(Request $request)
{
$request->validate([
'id' => ['required', 'integer']
]);
$article = Article::find($request->id);
return view('article', compact('article'));
}
}
もしルールと異なる場合はエラーメッセージを画面に返します。
これによって不適切な入力情報を防ぐことができます。
ログイン(Laravel Breeze)
Laravelでは簡単にログイン機能を作成することができます。
Laravelのログイン機能にはいくつか種類がありますが、一番簡易的なのがLaravel Breezeです。
コマンドを叩くだけで以下のような画面を作成することができます。
ぜひ、導入してみてください。
マイグレーション
マイグレーションはデータベースのテーブルを作成するファイルのことです。
以下はLaravelでデフォルトで入っているusersテーブルを作成するマイグレーションファイルです。
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
ターミナル上でphp artisan migrateを実行すると接続されているDBにテーブルが作成されます。
SQL文をかかずともテーブルを作成できるためとても便利!
シーダー
シーダーはテーブルにあらかじめデータを挿入することができるファイルです。
下記の例ではusersテーブルに2件データを挿入しています。
class UserSeeder extends Seeder
{
public function run()
{
DB::table('users')->insert(
[
[
'name' => "田中太郎",
'email' => "tanaka@taro.com",
'password'=>Hash::make(12345678),
'created_at'=>Carbon::now(),
'updated_at'=>Carbon::now(),
],
[
'name' => "山田花子",
'email' => "yamada@hanako.com",
'password'=>Hash::make(12345678),
'created_at'=>Carbon::now(),
'updated_at'=>Carbon::now(),
],
]
);
}
}
ターミナルでphp artisan db:seedと打てば実行されます。
マスタデータなど、あらかじめデータを入れておきたい場合に便利です。
クエリビルダ
クエリビルダとはその名の通り、クエリを作成する機能です。
クエリビルダを利用することでプログラム上で指定した条件のデータをデータベースから取得することができます。
下記のコードではusersテーブルの中でnameが田中太郎というレコードを取得しています。
public function index()
{
$users = DB::table('users')->where('name', '田中太郎')->get();
return view('user.index', ['users' => $users]);
}
Eloquent
Eloquent(エロクアント)はモデルからクエリビルダ同様クエリを作成したり、モデルを操作することができる機能です。
上記のクエリビルダをEloquentを使って表現すると以下のようになります。
public function index()
{
$users = User::where('name', '田中太郎')->get();
return view('user.index', ['users' => $users]);
}
クエリビルダよりも直感的に操作でき、さらにテーブルを操作するための様々な機能が備わっています。
データの取得は基本的にEloquentを使っていきましょう。
このようにオブジェクトとデータベースの関係性をマッピングすることをオブジェクトリレーショナルマッパー(ORM)と呼んでいます。
まとめ
いかがだったでしょうか?まとめてみると意外と覚えることは多いですね。
上記でご紹介した機能はLaravelを使っていく上で最低限知っておくべき項目なので1つ1つ地道に身につけていきましょう!
参考図書
Laravelの基礎を勉強するなら下記の青本がおすすめです。