Php Laravel 5请求类
在Laracasts中,特别是在Laravel5Fundamentals中,Jeffrey提到使用相同的请求类来创建和更新模型。我已尝试此操作,但出现错误: 这是我的班级Php Laravel 5请求类,php,mysql,laravel-5,laravel-request,Php,Mysql,Laravel 5,Laravel Request,在Laracasts中,特别是在Laravel5Fundamentals中,Jeffrey提到使用相同的请求类来创建和更新模型。我已尝试此操作,但出现错误: 这是我的班级 <?php namespace CRM\Http\Requests; use CRM\Http\Requests\Request; class ClientRequest extends Request { /** * Determine if the user is authorized to
<?php namespace CRM\Http\Requests;
use CRM\Http\Requests\Request;
class ClientRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public $rules = [
'company' => 'required|min:3',
'firstname' => 'required|min:3',
'lastname' => 'required|min:3',
'email' => 'required|email|unique:clients,email',
'phone' => 'required|min:6|phone|unique:clients,phone',
'address' => 'required|min:3'
];
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
if($clients = $this->clients){
$this->rules['email'] .= ','.$clients ;
$this->rules['phone'] .= ','.$clients ;
}
return $this->rules;
}
public function messages()
{
return ['phone' => 'The phone number is not valid. Please confirm and try again.'];
}
}
有人知道这里发生了什么吗?如果要编辑记录,您需要在一组规则中传递当前记录id以确保唯一性。对于您的案例,编辑记录的规则可以这样编写
public $rules = [
'company' => 'required|min:3',
'firstname' => 'required|min:3',
'lastname' => 'required|min:3',
'email' => 'required|email|unique:clients,email',
'phone' => 'required|min:6|phone|unique:clients,phone,id',
'address' => 'required|min:3'
];
此外,还必须为“编辑”和“插入”案例编写单独的规则
用于在同一请求类中处理多个规则的代码示例
public function rules()
{
$user = User::find($this->users);
switch($this->method())
{
case 'GET':
case 'DELETE':
{
return [];
}
case 'POST':
{
return [
'user.name.first' => 'required',
'user.name.last' => 'required',
'user.email' => 'required|email|unique:users,email',
'user.password' => 'required|confirmed',
];
}
case 'PUT':
case 'PATCH':
{
return [
'user.name.first' => 'required',
'user.name.last' => 'required',
'user.email' => 'required|email|unique:users,email,'.$user->id,
'user.password' => 'required|confirmed',
];
}
default:break;
}
}
我已经设法解决了。我换了
if($clients = $this->clients){
$this->rules['email'] .= ','.$clients ;
$this->rules['phone'] .= ','.$clients ;
}
与
在更新开始时添加dd$request->all并将输出发布到此处我仍然会收到相同的错误消息,因为$request是从ClientRequest类获得的,它有一个错误!我知道我们以前在Laravel4.2中是这样做的,但在Laravel5中情况发生了变化。我不想用两个请求类来创建和更新模型。你不必用两个类对象来处理这个问题,您可以根据请求方法在同一请求类中定义不同的规则集,例如如果其POST方法定义添加记录的规则,如果其修补方法定义编辑记录的规则。我认为如果$clients=$this->clients{…},则该if语句可以解决这一问题。我如何使用你的方法?请编写一些示例代码更新我的答案以添加基于请求方法添加规则的示例代码此部分$user->id在尝试获取非对象的属性时给了我一条错误消息
public function rules()
{
$user = User::find($this->users);
switch($this->method())
{
case 'GET':
case 'DELETE':
{
return [];
}
case 'POST':
{
return [
'user.name.first' => 'required',
'user.name.last' => 'required',
'user.email' => 'required|email|unique:users,email',
'user.password' => 'required|confirmed',
];
}
case 'PUT':
case 'PATCH':
{
return [
'user.name.first' => 'required',
'user.name.last' => 'required',
'user.email' => 'required|email|unique:users,email,'.$user->id,
'user.password' => 'required|confirmed',
];
}
default:break;
}
}
if($clients = $this->clients){
$this->rules['email'] .= ','.$clients ;
$this->rules['phone'] .= ','.$clients ;
}
if($this->method == "PUT"){
$this->rules['email'] .= ','.$this->clients->id ;
$this->rules['phone'] .= ','.$this->clients->id ;
}