Laravelの基礎であり、毎回忘れがちなのに重要なキーワードをまとめています。
内容
- マイグレーション
- ルーティング
- コントローラー
マイグレーション
ドキュメント
DBの作成や編集、削除などを管理する方法=バージョン管理。
誰が、いつ、どういった目的でテーブルの作成、編集、削除を行なったかがわかる。
手順
1. マイグレーションファイルの作成
2. 編集
3. 実行
1. マイグレーションファイルの作成
php argisan make:migration create_{テーブル名}_table
database/migrationsディレクトリ内にマイグレーションファイルを生成
2. マイグレーションファイルの編集
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
/*作成の処理を記述*/
// Schema::createの場合はテーブルを新規作成
Schema::create('table_new(テーブル名)', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->timestamps();
});
// Schema::tableの場合は既存テーブルの更新
Schema::table('table_old'){
$table->string('email');
}
// Schema::rename($from, $to);でリネームできる
Schema::rename('table_old', 'table_new');
// Schema::dropかSchema::dropIfExistsで既存テーブルの削除
Schema::drop('users');
Schema::dropIfExists('users');
// 既存カラムのタイプと属性変更 ->change()
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->change();
});
// カラム名のリネーム ->renameColumn
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});
// カラムの削除 ->dropColumn
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('votes');
})
// 複数カラムの削除
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['votes', 'avatar', 'location']);
});
}
public function down(): void
{
/*削除の処理を記述*/
Schema::drop('table_new');
}
};
よく使うデータ型
3. マイグレーションファイルの実行
php artisan migrate
これでテーブルの生成が完了する
その他のマイグレーションコマンド
これまでどのマイグレーションが実行されているか確認
php artisan migrate:status
マイグレーションを実行せず、実行するSQL文の確認
php artisan migrate:rollback --pretend
直前のマイグレーションをロールバック
php artisan migrate:rollback
--step=5 などをつけることで指定した数だけロールバックできる
全てロールバック
php argisan migrate:reset
全てロールバック+全マイグレーション実行
php artisan migrate:refresh
テーブルを削除し。前マイグレーション実行
php artisan migrate:fresh
書くマイグレーションファイルの状態表示
php argisan migtate:status
ルーティング
ドキュメント
参考
特定のアドレスにアクセスした際に、何のHTTPリクエストを要求されたら、どの処理を実行するかといった「ルート」を管理、設定する仕組み。
Laravelには、デフォルトでWeb用とAPI用の2つのルートがあり、それぞれweb.phpとapi.phpを使用。
基本的な書き方
Route::get('ディレクトリ名', function () {
// 処理したい内容
return 'Hello World';
});
ルートパラメータ
Route::get('posts/{id}', function ($id) {
return $id.'番のブログ投稿記事';
});
このように書き、 /posts/10にアクセスすると、10番のブログ投稿記事と表示される。
urlから必要なパラメーターを取り出して表示することができる。
以下のような複数指定もできる。
Route::get('posts/{postId}/comments/{commentId}', function ($postId, $commentId) {
return $postId.'番のブログ投稿記事の'.$commentId.'番目のコメント';
});
ビューを返す
以下のように記述することで、resources/viewsに作成したファイルを画面に表示できる。
Route::get('/contact', function() {
return view('contact');
});
return view('表示させたいviewファイル名')
また、以下のように配列を指定することもできる。
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);
コントローラを指定する
Route::get('/users', [UserController::class, 'index']);
functionの部分にコントローラーを書く。
※コントローラーについては後述するので、ここでは「こう言う書き方がある」程度の認識でOK。
名前付きルート
Route::get('/users', [UserController::class, 'index'])->name('users.index');
->name('users.index') のように名前をつけておくことで、このルートを呼び出すのが簡単になる。
ミドルウェア
ミドルウェアとは、「中間に入る処理」のこと。
例えばユーザーログイン認証で、ログインしていない場合、ルートにアクセスできないようにできる。
Route::get('/users', [UserController::class, 'index'])->middleware('auth');
Route::middleware('auth')->group(function () {
// ここにルート定義
});
リダイレクト
Route::redirect('/here', '/there');
「このURLにアクセスしたら、こっちにリダイレクトさせて」が簡単にできる。
コマンド
ルートリスト
php artisan route:list
アプリケーションで定義しているすべてのルートの概要を簡単に確認できる。
以下のように-vをつけることで、ミドルウェアの表示も可能。
php artisan route:list -v
コントローラー
ドキュメント
参考
web.phpなどにメソッド(関数)を記述していくよりも、コントローラーを使用することでメソッドを整理して利用しやすくなる。
関係するリクエスト処理ロジックを単一のクラスにグループ化できる。
たとえば、「UserControllerクラスは、ユーザーの表示、作成、更新、削除など、ユーザーに関連するすべての受信リクエストを処理する」のようにできる。
- ルーティングで受け取った情報をモデルやビューで処理するように指示すること
- モデルで受け取った情報をビューファイルで読み取れるように処理すること
作成方法
php artisan make:controller コントローラー名
app/Http/Controllers/コントローラー名.phpで生成される
任意のディレクトリに入れたい場合
php artisan make:controller Test/HelloController
app/Http/Controllers/Test/HelloController.phpが出来上がる
基本のコントローラー
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class コントローラー名 extends Controller
{
//
}
- namespace
名前空間。これをつけることで同じメソッド(関数)名でも、namespaceが異なれば別のメソッドとして扱える。 - use 名前空間(namespace)
指定した名前空間をインポートする
※Illuminate
vender > laravel > framework > src > Illuminateにある。
Illuminate\Http\RequestにはLaravelでデフォルトで使える便利なメソッドがいろいろ用意してある。
テキストを表示させてみる
<?php
namespace App\Http\Controllers;
class コントローラー名 extends Controller
{
public function メソッド名()
{
$text = "これはコントローラのテストです。";
//top.blade.phpに$textという変数を渡す場合
return view('top', ['view_text' => $text]);
}
}
view(ビューファイル名,ビューに渡したいもの)とすることでコントローラからビューへ指示を出すことができる。
Route::get('/URL','コントローラー名@メソッド名');
Route::get('/test','TestController@index');
Route::get('/test', [TestController::class, 'index']);
web.phpに上記のように記述することで、リクエストURLをルートで受け取ったときに、どのコントローラで処理するかを定める。
例えばURLが/testの場合、TestControllerのindexメソッドを実行できる。
<p>{{ $view_text }}</p>
次回はViewで使用するコンポーネントとslotについてまとめています