Laravel 表单请求和验证
Laravel form requests and validation
下面是我在控制器 (Laravel 5) 上对 create/store 和 edit/update 方法使用单一表单验证请求的解决方案。
这是一个麻烦且丑陋的 hack(即它读取 URI 段以获取正在编辑的记录的 ID)。有没有更好的方法来确定请求是否从 edit/update 请求接收信息? (不直接将 $id 和标志传递给请求)
/**
* Sets the basic validation rules that apply to the request.
*
* @return array
*/
protected $rules = [
'trading_name' => 'required|min:3|max:50|unique:companies',
'legal_name' => 'required|min:3|max:50|unique:companies',
'legal_identifier' => 'required|min:3|max:50|unique:companies',
'status' => 'required',
'website' => 'active_url',
'type' => 'required',
'payment_terms' => 'required|integer|min:0|max:180',
'credit_limit' => 'required|integer|min:0|max:500000',
'notes' => 'max:2000',
];
/**
* Sets addition validation rules depending on the request type (i.e. edit & update).
*
*
* @return array
*/
public function rules()
{
$rules = $this->rules;
if ($this->is('companies/*') == true) #Add a ignore self-unique rule as this is a edit&update request
{
$id = $this->segment(2);
$rules['trading_name'] = $rules['trading_name'].',trading_name,'.$id;
$rules['legal_name'] = $rules['legal_name'].',legal_name,'.$id;
$rules['legal_identifier'] = $rules['legal_identifier'].',legal_identifier,'.$id;
}
return $rules;
}
如果您遵循正确的 restful 路由技术 - 您可以改用请求类型 - 为任何验证提供通用解决方案
public function rules()
{
if($request()->isMethod('put'))
{
// Update rules here
}
return $this->rules;
}
好的,我已经用 google 解决了我自己的问题;这里有关于该主题的很好的资源 https://laracasts.com/discuss/channels/requests/laravel-5-validation-request-how-to-handle-validation-on-update
以下任何一项都有效(替换上面原始代码中的段 ID 行)
- $id = $this->route()->parameters()["companies"];
- $id = $this->route()->getParameter('companies');
- $id = $this->route('companies');
- $id = $this->公司
下面是我在控制器 (Laravel 5) 上对 create/store 和 edit/update 方法使用单一表单验证请求的解决方案。
这是一个麻烦且丑陋的 hack(即它读取 URI 段以获取正在编辑的记录的 ID)。有没有更好的方法来确定请求是否从 edit/update 请求接收信息? (不直接将 $id 和标志传递给请求)
/**
* Sets the basic validation rules that apply to the request.
*
* @return array
*/
protected $rules = [
'trading_name' => 'required|min:3|max:50|unique:companies',
'legal_name' => 'required|min:3|max:50|unique:companies',
'legal_identifier' => 'required|min:3|max:50|unique:companies',
'status' => 'required',
'website' => 'active_url',
'type' => 'required',
'payment_terms' => 'required|integer|min:0|max:180',
'credit_limit' => 'required|integer|min:0|max:500000',
'notes' => 'max:2000',
];
/**
* Sets addition validation rules depending on the request type (i.e. edit & update).
*
*
* @return array
*/
public function rules()
{
$rules = $this->rules;
if ($this->is('companies/*') == true) #Add a ignore self-unique rule as this is a edit&update request
{
$id = $this->segment(2);
$rules['trading_name'] = $rules['trading_name'].',trading_name,'.$id;
$rules['legal_name'] = $rules['legal_name'].',legal_name,'.$id;
$rules['legal_identifier'] = $rules['legal_identifier'].',legal_identifier,'.$id;
}
return $rules;
}
如果您遵循正确的 restful 路由技术 - 您可以改用请求类型 - 为任何验证提供通用解决方案
public function rules()
{
if($request()->isMethod('put'))
{
// Update rules here
}
return $this->rules;
}
好的,我已经用 google 解决了我自己的问题;这里有关于该主题的很好的资源 https://laracasts.com/discuss/channels/requests/laravel-5-validation-request-how-to-handle-validation-on-update
以下任何一项都有效(替换上面原始代码中的段 ID 行)
- $id = $this->route()->parameters()["companies"];
- $id = $this->route()->getParameter('companies');
- $id = $this->route('companies');
- $id = $this->公司