Pan*_*kaj 11 php laravel laravel-5.2
我在请求类中有一个非常简单的Rule方法,如下所示.
public function rules()
{
return [
'Subject' => 'required|max:50',
'Description' => 'required|max:500',
'DepartmentID' => 'required|integer|min:1',
'PriorityID' => 'required|integer|min:1'
];
}
Run Code Online (Sandbox Code Playgroud)
Inside Controller Action方法,下面是代码.
private function SaveChanges(\App\Http\Requests\TicketRequest $request) {
$v = \Validator::make($request->all(), [
]);
$DepartmentAdmins = $this->getDepartmentAdmins();
//Check if department admin missing then no need to add the record
if($DepartmentAdmins == null || count($DepartmentAdmins) == 0) {
$v->errors()->add('MissingAdmins', 'Department admin missing.');
return redirect()->back()->withErrors($v->errors());
}
}
Run Code Online (Sandbox Code Playgroud)
题:
正如我们在rule方法中看到的那样,有4个表单字段.有没有办法将部门管理员的检查从Controller Action方法转移到request类?
Laravel的Request具有after可正常验证完成后运行挂钩.这就是你如何在你的情况下使用它:
namespace App\Http\Requests;
use App\Http\Requests\Request;
use App\Models\Property;
use Illuminate\Validation\Validator;
class SomeRequest extends Request
{
/**
* Get the validator instance for the request.
*
* @return Validator
*/
protected function getValidatorInstance()
{
$instance = parent::getValidatorInstance();
$instance->after(function ($validator) {
$this->validateDepartmentAdmins($validator);
});
return $instance;
}
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'Subject' => 'required|max:50',
'Description' => 'required|max:500',
'DepartmentID' => 'required|integer|min:1',
'PriorityID' => 'required|integer|min:1'
];
}
/**
* @param Validator $validator
*/
public function validateDepartmentAdmins(Validator $validator)
{
$DepartmentAdmins = $this->getDepartmentAdmins();
//Check if department admin missing then no need to add the record
if($DepartmentAdmins == null || count($DepartmentAdmins) == 0) {
$validator->errors()->add('MissingAdmins', 'Department admin missing.');
}
}
Run Code Online (Sandbox Code Playgroud)
这样您就不必在SaveChanges控制器方法中进行任何验证.
此代码在Laravel 5.1中使用,但我相信它在5.2中的工作方式相同.
| 归档时间: |
|
| 查看次数: |
991 次 |
| 最近记录: |