diff --git a/README.md b/README.md index e62adb8..2a89680 100644 --- a/README.md +++ b/README.md @@ -56,3 +56,11 @@ Test method `test_validation_errors_shown_in_blade()`. --- +## Task 4. Showing a Specific Validation Error. + +In `resources/views/products/create.blade.php` file, show the validation error for `"name" => "required"`, using a specific Blade directive to show one specific error. + +Test method `test_validation_specific_error_shown_in_blade()`. + +--- + diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php new file mode 100644 index 0000000..ea1f438 --- /dev/null +++ b/app/Http/Controllers/ProductController.php @@ -0,0 +1,31 @@ +all(), [ + 'name' => 'required', + ]); + + if ($validator->fails()) { + return redirect('products/create') + ->withErrors($validator); + } + + Product::create($validator->validated()); + + return 'Success'; + } +} diff --git a/app/Models/Product.php b/app/Models/Product.php new file mode 100644 index 0000000..419ccca --- /dev/null +++ b/app/Models/Product.php @@ -0,0 +1,13 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('products'); + } +} diff --git a/resources/views/products/create.blade.php b/resources/views/products/create.blade.php new file mode 100644 index 0000000..611b7ef --- /dev/null +++ b/resources/views/products/create.blade.php @@ -0,0 +1,14 @@ +
+ @csrf + Name: +
+ +
+ {{-- TASK: show the validation error for the specific "name" field --}} + {{-- using one Blade directive: pseudo-code below --}} + {{-- @directive --}} + {{-- {{ $message }} --}} + {{-- @endDirective --}} +

+ +
diff --git a/routes/web.php b/routes/web.php index 662f268..b9e690a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,6 +16,7 @@ use Illuminate\Support\Facades\Route; Route::post('posts', [\App\Http\Controllers\PostController::class, 'store']); Route::post('profile', [\App\Http\Controllers\ProfileController::class, 'update'])->middleware('auth'); Route::resource('projects', \App\Http\Controllers\ProjectController::class); +Route::resource('products', \App\Http\Controllers\ProductController::class); Route::get('/', function () { return view('welcome'); diff --git a/tests/Feature/ValidationTest.php b/tests/Feature/ValidationTest.php index 3945d43..f3e6eb5 100644 --- a/tests/Feature/ValidationTest.php +++ b/tests/Feature/ValidationTest.php @@ -51,4 +51,12 @@ class ValidationTest extends TestCase $response->assertSee('The name field is required.'); $response->assertSee('The description field is required.'); } + + public function test_validation_specific_error_shown_in_blade() + { + // Post without name should fail + $response = $this->followingRedirects()->post('products'); + $response->assertStatus(200); + $response->assertSee('The name field is required.'); + } }