実現したいこと
新規登録フォームで、日付の登録とチェックボックスを使用して値の登録ができるようにしているのですが、日付のバリデーションがかかっているのにチェックボックスのバリデーションがかからず困っています。
最終的にはチェックボックスにチェックが入っていない時は、登録できないようにしたいです。
該当のソースコード
home.blade.php
<form id="task-form" method="POST" action="{{ route('done_task') }}"> @csrf <div class="tasks-group"> <p>できたことをチェック</p> <input id="brush" type="checkbox" name="title[]" value="ブラシ洗浄"><label for="brush">ブラシ洗浄</label> <input id="puff" type="checkbox" name="title[]" value="パフ洗浄"><label for="puff">パフ洗浄</label> <input id="pack" type="checkbox" name="title[]" value="顔のパック"><label for="pack">顔のパック</label><br> <input id="peeling" type="checkbox" name="title[]" value="ピーリング"><label for="peeling">ピーリング</label> <input id="treatment" type="checkbox" name="title[]" value="トリートメント"><label for="treatment">ヘアトリートメント</label><br> <div class="form-check form-check-inline"> <label for="other"><input type="checkbox"><label for="other">その他</label><input id="other" type="text" name="title[]"> </div> </div> <div class="tasks-group"> <label>登録する日付</label><input id="start" type="date" class="task-form" name="start" value=""> </div> <div class="modal-btn"> <button class="modal__btn modal__btn-primary mr-3" type="submit">登録</button> <a id="expire-btn" class="modal__btn cancel-btn" data-micromodal-close aria-label="Close this dialog window">キャンセル</a> </div> </form>
Request\Done.php
class Done extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'title' => 'required|max:100', 'start' => 'required', ]; } }
DoneTaskController.php
public function store(Done $request) { $task = new DoneTask; $task->user_id = Auth::id(); $task->start = $request->input('start'); if(isset($_POST['title'])) { $title = implode(',', $_POST['title']); $task->title = $title; } $task->save(); return redirect('/home'); }
Done.phpでチェックボックスのname属性であるtitle
をrequire
にしているのですが、チェックボックスを入力しなくても登録できるようになっています。
どなたか、ご教授いただけると助かります。
補足情報
-各バージョン
-Laravel 6.x
-PHP 7.4.9
追記
アドバイスをもとに、コントローラーを下記のように変更しました。
でもまだバリデーションはかからないようです。どの点に問題があるのでしょうか。
DoneTaskController.php
public function store(Done $request) { $task = new DoneTask; $task->user_id = Auth::id(); $task->start = $request->input('start'); $title = $request->input('title'); $task->title = implode(',', $title); $task->save(); return redirect('/home'); }
コメントを参考に、Done.phpで下記のようにデバッグをしましました。
public function rules() { dd($tihs->title); return [ 'title' => 'required|max:100', 'start' => 'required', ]; }
何もチェックを入れない場合は、array:1 [▼0 => null]
となり、チェックを入れるとarray:2 [▼0 => "顔のパック" 1 => null]
となりました。
回答1件
あなたの回答
tips
プレビュー