Laravel
表示
はじめに
[編集]Laravelは、PHPのモダンなウェブアプリケーションフレームワークです。エレガントな構文と強力な機能を提供し、開発者の生産性を最大限に高めることができます。
インストール
[編集]Composerを使用したインストール
[編集]新しいLaravelプロジェクトを作成するには、以下の`Composer`コマンドを実行します:
composer create-project laravel/laravel example-app cd example-app php artisan serve
ルーティング
[編集]基本的なルーティング
[編集]routes/web.phpでルートを定義します:
use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('welcome'); }); Route::get('/hello', function () { return 'Hello, World!'; });
パラメータ付きルート
[編集]Route::get('/users/{id}', function ($id) { return 'User '.$id; }); // オプションパラメータ Route::get('/posts/{post?}', function ($post = null) { return $post ?? 'All posts'; });
コントローラー
[編集]基本的なコントローラー
[編集]- コントローラーを生成:
php artisan make:controller UserController
- コントローラーの実装例:
namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { public function index() { $users = User::all(); return view('users.index', compact('users')); } public function show(User $user) { return view('users.show', compact('user')); } public function store(Request $request) { $validated = $request->validate([ 'name' => 'required|max:255', 'email' => 'required|email|unique:users', ]); User::create($validated); return redirect()->route('users.index'); } }
Eloquent ORM
[編集]モデルの作成
[編集]php artisan make:model Post -m
モデルの基本的な使用
[編集]namespace App\Models; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $fillable = [ 'title', 'content', 'user_id' ]; public function user() { return $this->belongsTo(User::class); } public function comments() { return $this->hasMany(Comment::class); } }
ビュー
[編集]Bladeテンプレート
[編集]- resources/views/posts/show.blade.php
@extends('layouts.app') @section('content') <div class="container"> <h1>{{ $post->title }}</h1> <div class="content"> {{ $post->content }} </div> @if($post->comments->count() > 0) <div class="comments"> @foreach($post->comments as $comment) <div class="comment"> <p>{{ $comment->content }}</p> <small>By: {{ $comment->user->name }}</small> </div> @endforeach </div> @endif </div> @endsection
ミドルウェア
[編集]カスタムミドルウェアの作成
[編集]php artisan make:middleware CheckAge
namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class CheckAge { public function handle(Request $request, Closure $next) { if ($request->age <= 18) { return redirect('home'); } return $next($request); } }
アーティザンコマンド
[編集]よく使用するコマンド
[編集]# マイグレーション php artisan migrate php artisan migrate:rollback php artisan migrate:fresh # キャッシュクリア php artisan cache:clear php artisan config:clear php artisan view:clear # 開発サーバー起動 php artisan serve # リソースの作成 php artisan make:controller PostController --resource php artisan make:model Post -mcr
テスト
[編集]基本的なテストの作成
[編集]namespace Tests\Feature; use Tests\TestCase; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; class UserTest extends TestCase { use RefreshDatabase; public function test_user_can_be_created() { $userData = [ 'name' => 'Test User', 'email' => 'test@example.com', 'password' => 'my secret password' ]; $response = $this->post('/api/users', $userData); $response->assertStatus(201); $this->assertDatabaseHas('users', [ 'email' => 'test@example.com' ]); } }
セキュリティ
[編集]CSRF保護
[編集]フォーム内でCSRFトークンを含める:
<form method="POST" action="/profile"> @csrf ... </form>
認証
[編集]auth.phpでガードを設定:
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'sanctum', 'provider' => 'users', ], ],
キャッシュ
[編集]キャッシュの基本的な使用
[編集]use Illuminate\Support\Facades\Cache; // キャッシュに値を保存 Cache::put('key', 'value', now()->addMinutes(10)); // キャッシュから値を取得 $value = Cache::get('key', 'default'); // キャッシュが存在しない場合にコールバックを実行 $value = Cache::remember('users', 3600, function () { return User::all(); });
キュー
[編集]ジョブの作成と実行
[編集]- ジョブクラスの作成:
php artisan make:job ProcessPodcast
namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; class ProcessPodcast implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function __construct(private $podcast) { $this->podcast = $podcast; } public function handle() { // ジョブの処理ロジック } }
- ジョブのディスパッチ:
ProcessPodcast::dispatch($podcast);