Laravelでname属性を設定しているのに、$requestに含まれない

実現したいこと

ユーザー登録画面を作成しています。
breezeのregisterを参考、項目も追加しています。

発生している問題・分からないこと

追加した項目にname属性はつけていますが、
1.追加のselectボックスですが、未入力だとnullになります。
2.追加のcheckboxですが、未入力だと$requestに入ってきません。
3.1,2共に入力すれば$requestに入ってきているのですが、DBに登録されません。(なんのエラーも発しないです)

name属性はついています。
イメージ説明
でも、workplace_idが未入力のときはnullで、administratorは未チェックのときは$requestに入りません。
イメージ説明

該当のソースコード

```web.php <?php use App\Http\Controllers\ProfileController; use Illuminate\Support\Facades\Route; use App\Http\Controllers\UserController; use Illuminate\Support\Facades\View; /* |-------------------------------------------------------------------------- | 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('/dashboard', function () { return view('dashboard'); })->middleware(['auth', 'verified'])->name('dashboard'); Route::middleware('auth')->group(function () { Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); Route::get('/master', function () { return view('master.dashboard'); })->name('master'); Route::get('/primary', function () { return view('primary.dashboard'); })->name('primary'); Route::get('master/user/index', [UserController::class, 'index'])->name('user.index'); Route::get('master/user/create', [UserController::class, 'create'])->name('user.create'); Route::post('user', [UserController::class, 'store'])->name('user.store'); }); require __DIR__.'/auth.php';

UserController.php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Models\Workplace; 7use \Illuminate\View\View; 8use App\Models\User; 9use Illuminate\Validation\Rules; 10use Illuminate\Support\Facades\Hash; 11 12class UserController extends Controller 13{ 14 public function create(): View 15 { 16 $workplaces = Workplace::select('id', 'name')->get(); 17 return view('master.user.create', compact('workplaces')); 18 } 19 20 public function index(): View 21 { 22 $users = User::all(); 23 return view('master.user.index', compact('users')); 24 } 25 26 public function store(Request $request): RedirectResponse 27 { 28 $request->validate([ 29 'name' => ['required', 'string', 'max:255'], 30 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], 31 'password' => ['required', 'confirmed', Rules\Password::defaults()], 32 'workplace_id' => ['required', 'numeric'], 33 'administrator' => ['required', 'boolean'], 34 ]); 35 36 $user = User::create([ 37 'name' => $request->name, 38 'email' => $request->email, 39 'password' => Hash::make($request->password), 40 'workplace_id' => $request->workplace_id, 41 'administrator' => $request->boolean('administrator'), 42 ]); 43 44 return redirect()->route('user.index'); 45 } 46}

create.blade.php

1<!DOCTYPE html> 2<html lang="jp"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>{{ __('Master Maintenance') }}</title> 8</head> 9<body> 10 <form method="POST" action="{{ route('user.store') }}" id="form"> 11 @csrf 12 13 <div class="w-80"> 14 {{-- 氏名 --}} 15 <div> 16 <x-input-label for="name" :value="__('Name')" /> 17 <x-text-input id="name" class="block mt-1 w-full" type="text" name="name" :value="old('name')" required autofocus autocomplete="name" /> 18 <x-input-error :messages="$errors->get('name')" class="mt-2" /> 19 </div> 20 21 {{-- Email Address --}} 22 <div class="mt-4"> 23 <x-input-label for="email" :value="__('Email')" /> 24 <x-text-input id="email" class="block mt-1 w-full" type="email" name="email" :value="old('email')" required autocomplete="username" /> 25 <x-input-error :messages="$errors->get('email')" class="mt-2" /> 26 </div> 27 28 {{-- Password --}} 29 <div class="mt-4"> 30 <x-input-label for="password" :value="__('Password')" /> 31 32 <x-text-input id="password" class="block mt-1 w-full" 33 type="password" 34 name="password" 35 required autocomplete="new-password" /> 36 37 <x-input-error :messages="$errors->get('password')" class="mt-2" /> 38 </div> 39 40 {{-- Confirm Password --}} 41 <div class="mt-4"> 42 <x-input-label for="password_confirmation" :value="__('Confirm Password')" /> 43 44 <x-text-input id="password_confirmation" class="block mt-1 w-full" 45 type="password" 46 name="password_confirmation" required autocomplete="new-password" /> 47 48 <x-input-error :messages="$errors->get('password_confirmation')" class="mt-2" /> 49 </div> 50 51 {{-- 作業所 --}} 52 <div class="mt-4"> 53 <x-input-label for="workplace_id" :value="__('workplace_id')" /> 54 <x-input-select :options="$workplaces" name="workplace_id" class="block mt-1 w-full" /> 55 <x-input-error :messages="$errors->get('workplace_id')" class="mt-2" /> 56 </div> 57 58 {{-- 権限 --}} 59 <div class="mt-4"> 60 <x-input-label for="authority" :value="__('authority')" /> 61 <x-input-checkbox name="administrator" class="block mt-1" :label="'管理者権限'" /> 62 <x-input-error :messages="$errors->get('administrator')" class="mt-2" /> 63 </div> 64 65 <div class="mt-4 flex justify-end"> 66 <a href="#" id="back-btn" class="custom-link">戻る</a> 67 <x-primary-button class="ms-4"> 68 {{ __('Register') }} 69 </x-primary-button> 70 </div> 71 </div> 72 </form> 73 74 <script> 75 document.getElementById('back-btn').addEventListener('click', function() { 76 $('#form').hide(); 77 $.ajax({ 78 type: 'GET', 79 url: '{{ route("user.index") }}', 80 success: function(response) { 81 $('#dashboard-content').html(response); 82 }, 83 error: function(xhr, status, error) { 84 console.error(xhr.responseText); 85 } 86 }); 87 }); 88 </script> 89 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> 90</body> 91</html>

input

1@props(['options', 'name']) 2 3<select name={{ $name }} {{ $attributes->merge(['class' => 'border-gray-300 focus:border-indigo-500 focus:ring-indigo-500 rounded-md shadow-sm']) }} > 4 <option value="">選択してください</option> 5 @foreach ($options as $option) 6 <option value="{{ $option['id'] }}">{{ $option['name'] }}</option> 7 @endforeach 8</select>

input

1@props(['name', 'label']) 2 3<label {{ $attributes->merge(['class' => 'border-gray-300 focus:border-indigo-500 focus:ring-indigo-500 rounded-md shadow-sm']) }}> 4 <input type="checkbox" name={{ $name }}> 5 {{ $label }} 6</label>

### 試したこと・調べたこと - [x] teratailやGoogle等で検索した - [ ] ソースコードを自分なりに変更した - [ ] 知人に聞いた - [ ] その他 ##### 上記の詳細・結果 ChatGPTなどを用いつつ、$requestの状況を参照したり、 ajaxで表示しているinput類のnameがきちんと設定されているかなど確認しましたが、見当がつきません。 ### 補足 AWSLightsail+Laravel10です

コメントを投稿

0 コメント