From 7d3ccdd6ecca26f615bf80a3e259a489eedf7e91 Mon Sep 17 00:00:00 2001 From: PovilasKorop Date: Mon, 29 Nov 2021 13:34:42 +0200 Subject: [PATCH] Task 4 - showing specific validation error --- README.md | 8 +++++ app/Http/Controllers/ProductController.php | 31 ++++++++++++++++++ app/Models/Product.php | 13 ++++++++ ...021_11_29_112611_create_products_table.php | 32 +++++++++++++++++++ resources/views/products/create.blade.php | 14 ++++++++ routes/web.php | 1 + tests/Feature/ValidationTest.php | 8 +++++ 7 files changed, 107 insertions(+) create mode 100644 app/Http/Controllers/ProductController.php create mode 100644 app/Models/Product.php create mode 100644 database/migrations/2021_11_29_112611_create_products_table.php create mode 100644 resources/views/products/create.blade.php 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.'); + } }