Laravel入門
イントロダクション
アルバイト先の社内勉強会のメモ書きです.
laravelとは
- PHPのフレームワーク
- 開発を行う際に必要となる機能や、基本的な骨組みをまとめたもの
- 効率的な開発が可能
Laravelの特徴
MVCアーキテクチャ
- LaravelではMVCアーキテクチャを採用している
- MVCとはデータベースとの接続を行うModel(モデル)、ブラウザへの表示を行うView(ビュー)、指令や指示を司るController(コントローラ)の3つの機能を分けて開発することをいう
- それぞれのコードは独立しており,コードを修正した場合でも全体に及ぼす影響が少ない
- それゆえ分業もしやすい
テンプレートエンジン
- Bladeファイルを利用することで,HTML内で変数やプログラミングの構文(forやif)を利用することができる
- reactのコンポーネントに近い
<div>
@if (Route::has('login'))
<div>
@auth
<a href="{{ url('/profile') }}">{{ $name }}</a>
@else
<a href="{{ route('login') }}">Log in</a>
@if (Route::has('register'))
<a href="{{ route('register') }}">Register</a>
@endif
@endauth
</div>
@endif
Eloquent ORM
- データベース操作を直感的に行えるようにするための機能
- pythonのSQLAlchemy,node.jsのPrismaのようなもの
$user = User::where('email', 'example@example.com')->first();
User::create([
'name' => 'Jane Doe',
'email' => 'jane@example.com',
'password' => bcrypt('password'),
]);
Auth機能
ログイン認証などの機能もあらかじめ存在する
パッケージ管理
Composerと言うパッケージ管理ツールを利用している.
開発に必要ないろいろな機能を利用,管理することができる.
node.jsのnpmのようなもの
機能の説明
ビュー
Web画面の表示の部分
次に紹介するコントローラから変数を受け取り表示を行う.
forやifなどのプログラミング構文が利用できる.
拡張子は.blade.php
コントローラ
入力の処理やデータベース操作などバックエンドの部分を担当している
データを変数に格納し適切なビューを返す
ルーティング
URLを適切なコントローラや処理に割り当てる機能
Route::get('/articles', [ArticleController::class, 'index']);
Route::post('/articles', [ArticleController::class, 'store']);
Route::get('/articles/{article}', [ArticleController::class, 'show']);
モデル
テーブルごとのORM
CRUD(Create, Read, Update, Delete)操作を簡単に実装できる
マイグレーション
データベースのバージョン管理
データベーススキーマを定義および共有できる
テーブルの作成や修正などをファイルで管理している
php artisan make:migration create_{テーブル名}_table
でマイグレーションファイルを作成
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
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.
*/
public function down(): void
{
Schema::dropIfExists('users');
}
};
テーブル構造を定義して...
php artisan migrate
でテーブル作成!
シーディング
コードで初期データを定義する
php artisan make:seeder UserSeeder
でシーダーファイルを作成
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
DB::table('users')->insert([
'name' => 'Zun Teku',
'email' => 'teku.zun@horizon-cg.com',
'password' => 'password',
]);
}
}
初期データを定義して...
php artisan db:seed
でデータ挿入完了!
実践
インストール
Laravel9からdockerでの環境構築が推奨されていて,docker環境を操作するためのCLI(sail)が提供されている.
これでdocker環境を利用しながらdockerを意識せずローカルから開発を行える.
すごい!
今回はlaravelとmysqlのみインストールする
curl -s "https://laravel.build/project-name?php=82&with=mysql" | bash
echo "alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'" >> ~/.zshrc
>>
を>
にすると~/.zshrcを全部上書きしてしまうので注意😭
source ~/.zshrc
cd project-name && sail up -d
ブラウザでlocalhostを確認
動かない時
- port確認
- 多分
.env
で設定する
- 多分
-
sail artisan key:generate
をしてみる
コントローラ作成
コマンドでコントローラを作成
sail artisan make:controller HelloController
ファイルを以下のように変更する.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HelloController extends Controller
{
- //
+ public function show()
+ {
+ $name = 'Zun Teku';
+ return view('hello', ['name' => $name]);
+ }
}
ルーティング
ファイルを以下のように変更する.
<?php
use Illuminate\Support\Facades\Route;
+ use App\Http\Controllers\HelloController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
+ Route::get('/hello', [HelloController::class, 'show']);
ビュー作成
resources/views配下にhello.blade.phpを作成.
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
</head>
<body>
<p>hello world!</p>
<p>my name is {{ $name }}</p>
</body>
</html>
応用
TodoList作成
- controllerで変数設定し,viewに渡す
- viewで変数を表示
- viewでforなどを利用
- modelを利用してdbと接続
などなど
Discussion