Task 8 - customize validation messages

This commit is contained in:
PovilasKorop
2021-11-29 15:47:54 +02:00
parent ce6827fab8
commit 254985ac99
8 changed files with 130 additions and 3 deletions
+8
View File
@@ -88,3 +88,11 @@ Test method `test_update_forbidden_field()`.
---
## Task 8. Customize Validation Messages.
In `app/Http/Controllers/BuildingController.php` file, in `store` method, the code uses `StoreBuildingRequest` Form Request class. Change that class to customize the validation rule for "name" field as "required", to show message "Please enter the name" instead of the default "The field name is required".
Test method `test_custom_error_message()`.
---
@@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers;
use App\Http\Requests\StoreBuildingRequest;
use App\Models\Building;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class BuildingController extends Controller
{
public function create()
{
return view('buildings.create');
}
// TASK: Customize the validation error message to say "Please enter the name"
public function store(StoreBuildingRequest $request)
{
Building::create($validator->validated());
return 'Success';
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
// TASK: Customize the validation error message to say "Please enter the name"
class StoreBuildingRequest extends FormRequest
{
protected $redirectRoute = 'buildings.create';
/**
* 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 [
'name' => 'required'
];
}
}
+13
View File
@@ -0,0 +1,13 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Building extends Model
{
use HasFactory;
protected $fillable = ['name'];
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateBuildingsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('buildings', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('buildings');
}
}
@@ -0,0 +1,11 @@
<form method="POST" action="{{ route('buildings.store') }}">
@csrf
Name:
<br />
<input type="text" name="name" />
<br />
{{-- TASK: Customize the validation error message to say "Please enter the name" --}}
@error('name') {{ $message }} @enderror
<br /><br />
<button type="submit">Save</button>
</form>
+1
View File
@@ -20,6 +20,7 @@ Route::resource('products', \App\Http\Controllers\ProductController::class);
Route::resource('teams', \App\Http\Controllers\TeamController::class);
Route::resource('items', \App\Http\Controllers\ItemController::class);
Route::put('users/{user}', [\App\Http\Controllers\UserController::class, 'update']);
Route::resource('buildings', \App\Http\Controllers\BuildingController::class);
Route::get('/', function () {
return view('welcome');
+8 -3
View File
@@ -45,7 +45,6 @@ class ValidationTest extends TestCase
public function test_validation_errors_shown_in_blade()
{
// Post without name and description should fail
$response = $this->followingRedirects()->post('projects');
$response->assertStatus(200);
$response->assertSee('The name field is required.');
@@ -54,7 +53,6 @@ class ValidationTest extends TestCase
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.');
@@ -62,7 +60,6 @@ class ValidationTest extends TestCase
public function test_old_value_stays_in_form_after_validation_error()
{
// Post without name should fail
$response = $this->followingRedirects()->post('teams', ['name' => 'Abc']);
$response->assertStatus(200);
$response->assertSee('Abc');
@@ -99,4 +96,12 @@ class ValidationTest extends TestCase
$this->assertNotNull($user);
$this->assertEquals(false, $user->is_admin);
}
public function test_custom_error_message()
{
$response = $this->followingRedirects()->post('buildings');
$response->assertStatus(200);
$response->assertSee('Please enter the name');
}
}