1. 基本的な検証
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8|confirmed',
'role' => ['required', Rule::in(['admin', 'staff', 'customer'])],
'avatar' => 'nullable|image|max:2048',
'tags' => 'array|max:5',
'tags.*' => 'string|max:50',
]);
User::create($validated);
}
2. フォームリクエスト
php artisan make:request StoreProductRequest
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class StoreProductRequest extends FormRequest
{
public function authorize(): bool
{
return $this->user()->can('create', Product::class);
}
public function rules(): array
{
return [
'name' => 'required|string|max:255',
'slug' => ['required', Rule::unique('products')->ignore($this->product)],
'price' => 'required|numeric|min:0',
'category_id' => 'required|exists:categories,id',
'description' => 'nullable|string|max:5000',
];
}
public function messages(): array
{
return [
'name.required' => 'Tên sản phẩm là bắt buộc.',
'price.min' => 'Giá phải lớn hơn hoặc bằng 0.',
];
}
}
// Controller
public function store(StoreProductRequest $request)
{
Product::create($request->validated());
}
3. カスタム検証ルール
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class NoSpam implements ValidationRule
{
public function validate(string $attribute, mixed $value, Closure $fail): void
{
$spamWords = ['viagra', 'casino', 'lottery'];
foreach ($spamWords as $word) {
if (str_contains(strtolower($value), $word)) {
$fail("Nội dung :attribute chứa từ không được phép.");
}
}
}
}
// Sử dụng
'description' => ['required', new NoSpam],
4. 条件付き検証
public function rules(): array
{
return [
'payment_method' => 'required|in:card,bank_transfer',
'card_number' => 'required_if:payment_method,card|digits:16',
'bank_name' => 'required_if:payment_method,bank_transfer',
];
}
次の記事: API リソースと応答。