我使用Laravel 5.3
我的规则Laravel是这样的:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class AddCartRequest extends FormRequest
{
public function rules()
{
return [
'product_id'=>'required|numeric',
'delivery_address'=>'required',
'request_delivery_at' => 'required|date_format:d-m-Y H:i:s|after:120 minutes'
];
}
}
echo '<pre>';print_r($this->request->get('delivery_address'));echo '</pre>';
的结果如下:
Array
(
[sender_name] => chelsea
[postal] => 12345
[country] => japan
[city] => tokyo
[send_date] => 09-12-2017
[send_time] =>
[information] => test
)
我想这样做:
如果send_time为空,则request_delivery_at的规则如下:
'request_delivery_at' => 'required|date_format:d-m-Y H:i:s'
所以,没有|after:120 minutes
如果send_time有值(例如send_time = 12:30:00),request_delivery_at的规则如下:
'request_delivery_at' => 'required|date_format:d-m-Y H:i:s|after:120 minutes'
我该怎么做?
更新:
我试着这样:
public function rules()
{
$send_time = $this->request->get('delivery_address')['send_time'];
if($send_time)
$validation_time = '|after:120 minutes';
else
$validation_time = '';
return [
'product_id'=>'required|numeric',
'delivery_address'=>'required',
'request_delivery_at' => 'required|date_format:d-m-Y H:i:s'.$validation_time
];
}
似乎有效
答案 0 :(得分:0)
您的问题对我来说不是很清楚,到目前为止我理解的是,您希望根据送货地址数组的发送时间,有条件验证规则,
您可以通过创建自己的验证规则或在控制器中有条件地添加验证来实现此目的,
控制器方法ex:
if(!$request->has('delivery_address.send_time')){
$rules = [
];
$messages = [
];
$validator = Validator::make($request->all(),$rules,$messages);
if($validator->fails()){
$this->throwValidationException($request,$validator);
}
}else{
$rules = [
];
$messages = [
];
$validator = Validator::make($request->all(),$rules,$messages);
if($validator->fails()){
$this->throwValidationException($request,$validator);
}
}
或者您可以参考以下我的答案,了解如何制作自定义验证规则。 Date Compare in validation Laravel 5.2