添加新学生需要填写姓氏,名字和出生日期。但是,当学生被编辑时,出生日期不是必需的。到目前为止,只有“存储”方法有效:
表单请求:
public function rules()
{
return [
'group_id' => 'required|numeric',
'last_name' => 'required|alpha|min:2',
'given_name' => 'required|alpha|min:2',
'date_of_birth' => 'required',
];
}
控制器:
public function store(StudentValidation $request)
{
Student::create($request->all());
return redirect()->route('students.index');
}
public function update(StudentValidation $request, Student $student)
{
$student->update($request->except(['date_of_birth']));
return redirect()->route('students.index');
}
如果学生有更新,我该如何忘记出生日期字段?
答案 0 :(得分:2)
假设您使用的是标准RESTful路由,例如Post
用于创建,PUT/PATCH
用于更新,您可以执行以下操作:
public function rules()
{
$rules = [
'group_id' => 'required|numeric',
'last_name' => 'required|alpha|min:2',
'given_name' => 'required|alpha|min:2',
'date_of_birth' => 'required',
];
if ($this->method() === 'POST') {
$rules['date_of_birth'] = 'required';
}
return $rules;
}
答案 1 :(得分:1)
您必须使用这样的规则,还必须使用PUT|PATCH
public function rules()
{
switch($this->method())
{
case 'GET':
case 'DELETE':
{
return [];
}
case 'POST':
{
return [
'group_id' => 'required|numeric',
'last_name' => 'required|alpha|min:2',
'given_name' => 'required|alpha|min:2',
'date_of_birth' => 'required',
];
}
case 'PUT':
case 'PATCH':
{
return [
'group_id' => 'required|numeric',
'last_name' => 'required|alpha|min:2',
'given_name' => 'required|alpha|min:2',
];
}
default:break;
}
}
答案 2 :(得分:0)
您可以按照以下步骤进行操作
check_numbers()
基本上,如果您没有学生证(即您正在创建一个学生),则需要输入生日。假设您的主键是“ student_id”。您可以/应该将“ student_id”更改为您的主键列名。
答案 3 :(得分:0)
您可以这样做
StudentValidation请求类
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Validator;
class StudentValidation extends FormRequest
{
private $rulesValidation = [
'group_id' => 'required|numeric',
'last_name' => 'required|alpha|min:2',
'given_name' => 'required|alpha|min:2',
];
/**
* 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 [
//
];
}
public function addStudent($request)
{
$this->rulesValidation['date_of_birth'] = 'required';
Validator::make($request,
$this->rulesValidation
)->validate();
}
public function updateStudent($request)
{
Validator::make($request,$this->rulesValidation)->validate();
}
}
控制器端代码..
public function store(StudentValidation $request)
{
//if fail automatically throw error ...
$request->addStudent($request->all()); //call here method before create student...
Student::create($request->all());
return redirect()->route('students.index');
}
public function update(StudentValidation $request, Student $student)
{
$student->updateStudent($request->all()); //same as create
$student->update($request->except(['date_of_birth']));
return redirect()->route('students.index');
}
假设以后您将方法类型 post 更改为 put ,则您的代码为 失败,但如果您这样做,则代码可以正常工作完全,并且 再次重用您的代码,如果要在另一个控制器中使用相同的验证请求类,则可以使用...