Creating student works. Need to work on validation rules

This commit is contained in:
Matt Young 2024-05-30 19:35:30 -05:00
parent dac1e96330
commit 3ef579d5ed
2 changed files with 46 additions and 1 deletions

View File

@ -5,11 +5,13 @@ namespace App\Http\Controllers;
use App\Models\School;
use App\Models\Student;
use App\Models\User;
use App\Rules\UniqueFullNameAtSchool;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use function abort;
use function redirect;
// TODO validation rules to make sure a student name is unique at a school
class StudentController extends Controller
{
/**
@ -37,7 +39,7 @@ class StudentController extends Controller
if ($request->user()->cannot('create', Student::class)) abort(403);
$request->validate([
'first_name' => ['required'],
'last_name' => ['required'],
'last_name' => ['required', new UniqueFullNameAtSchool(request('first_name'),request('last_name'), Auth::user()->school_id)],
'grade' => ['required', 'integer'],
]);

View File

@ -0,0 +1,43 @@
<?php
namespace App\Rules;
use App\Models\Student;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class UniqueFullNameAtSchool implements ValidationRule
{
protected $first_name;
protected $last_name;
protected $school_id;
public function __construct($firstName, $lastName, $schoolID)
{
$this->first_name = $firstName;
$this->last_name = $lastName;
$this->school_id = $schoolID;
}
public function passes($attributies, $value)
{
return Student::where('first_name', $this->first_name)
->where('last_name', $this->last_name)
->where('school_id', $this->school_id)
->exists();
}
public function message()
{
return "There is already a student with that name at the school you are trying to add them to";
}
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
//
}
}