From 6b68d61385f9d469cd914840135cca2656124e3b Mon Sep 17 00:00:00 2001 From: "Christopher C. Wells" Date: Sat, 17 Apr 2021 19:42:33 -0700 Subject: [PATCH] Improve Goal validation feedback --- app/Http/Controllers/GoalController.php | 13 ++++--------- app/Http/Requests/UpdateGoalRequest.php | 25 +++++++++++++++++++++++++ app/Models/Goal.php | 8 ++++++-- resources/views/goals/edit.blade.php | 11 ++++++++--- 4 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 app/Http/Requests/UpdateGoalRequest.php diff --git a/app/Http/Controllers/GoalController.php b/app/Http/Controllers/GoalController.php index fd6b0ad..15a7a6b 100644 --- a/app/Http/Controllers/GoalController.php +++ b/app/Http/Controllers/GoalController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Http\Requests\UpdateGoalRequest; use App\Models\Goal; use Illuminate\Contracts\View\View; use Illuminate\Http\RedirectResponse; @@ -40,7 +41,7 @@ class GoalController extends Controller /** * Store a newly created resource in storage. */ - public function store(Request $request): RedirectResponse + public function store(UpdateGoalRequest $request): RedirectResponse { return $this->update($request, new Goal()); } @@ -70,15 +71,9 @@ class GoalController extends Controller /** * Update the specified resource in storage. */ - public function update(Request $request, Goal $goal): RedirectResponse + public function update(UpdateGoalRequest $request, Goal $goal): RedirectResponse { - $attributes = $request->validate([ - 'from' => ['nullable', 'date'], - 'to' => ['nullable', 'date'], - 'frequency' => ['required', 'string'], - 'name' => ['required', 'string'], - 'goal' => ['required', 'numeric'], - ]); + $attributes = $request->validated(); $goal->fill($attributes)->user()->associate(Auth::user()); $goal->save(); session()->flash('message', "Goal updated!"); diff --git a/app/Http/Requests/UpdateGoalRequest.php b/app/Http/Requests/UpdateGoalRequest.php new file mode 100644 index 0000000..8e8146d --- /dev/null +++ b/app/Http/Requests/UpdateGoalRequest.php @@ -0,0 +1,25 @@ + ['nullable', 'date'], + 'to' => ['nullable', 'date'], + 'frequency' => ['required', 'string'], + 'name' => ['required', 'string'], + 'goal' => ['required', 'numeric', 'min:0'], + ]; + } + +} diff --git a/app/Models/Goal.php b/app/Models/Goal.php index 2bd35a2..3c66e9e 100644 --- a/app/Models/Goal.php +++ b/app/Models/Goal.php @@ -6,6 +6,7 @@ use App\Support\Nutrients; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Support\Str; /** * App\Models\Goal @@ -44,7 +45,10 @@ final class Goal extends Model * Supported options for thr frequency attribute. */ public static array $frequencyOptions = [ - 'daily' => ['value' => 'daily', 'label' => 'daily'], + 'daily' => [ + 'value' => 'daily', + 'label' => 'daily' + ], ]; /** @@ -94,7 +98,7 @@ final class Goal extends Model foreach (Nutrients::all() as $nutrient) { $options[$nutrient['value']] = [ 'value' => $nutrient['value'], - 'label' => $nutrient['label'], + 'label' => Str::ucfirst($nutrient['label']), 'unit' => $nutrient['unit'], ]; } diff --git a/resources/views/goals/edit.blade.php b/resources/views/goals/edit.blade.php index 9303d8b..85ee4ba 100644 --- a/resources/views/goals/edit.blade.php +++ b/resources/views/goals/edit.blade.php @@ -15,7 +15,8 @@ + :value="old('from', $goal->from?->toDateString())" + :hasError="$errors->has('from')" /> @@ -24,7 +25,8 @@ + :value="old('to', $goal->to?->toDateString())" + :hasError="$errors->has('to')" /> @@ -33,7 +35,8 @@ + :selectedValue="old('frequency', $goal->frequency)" + :hasError="$errors->has('frequency')"> @@ -44,6 +47,7 @@ class="block w-full" :options="$nameOptions" :selectedValue="old('name', $goal->name)" + :hasError="$errors->has('name')" required> @@ -56,6 +60,7 @@ step="any" class="block w-full" :value="old('goal', $goal->goal)" + :hasError="$errors->has('goal')" required />