我用php artisan make:rule创建了一个自定义规则,将其设置在控制器中,但是它不起作用。可能是什么问题?
class CheckDeliveryDate implements Rule
{
public $client_id;
private $is_after_midday;
private $error_messge;
public function __construct(int $client_id)
{
$this->client_id = $client_id;
$this->is_after_midday = Carbon::now()->greaterThan(Carbon::now()->midDay());
$this->error_messge = 'Error';
}
public function passes($attribute, $value)
{
$delivery_date = Carbon::parse($value);
if ($delivery_date->isToday()) {
$this->error_messge = 'Error';
return false;
}
if ($delivery_date->endOfDay()->isPast()) {
$this->error_messge = 'Error';
return false;
}
return true;
}
public function message()
{
return $this->error_messge;
}
}
在控制器中,我设置了方法规则:
public function rules($client_id)
{
return [
'orders.*.positions.*.delivery_time' => [
'required',
'date',
new CheckDeliveryDate($client_id)
],
];
}
当我存储订单时,validator-> fails()返回“ false”。
$validator = Validator::make(
$request->all(),
$this->rules($client_id)
);
我尝试在Rule中设置dd或dump,但不起作用。我的错误在哪里?
答案 0 :(得分:0)
如laravel文档(https://laravel.com/docs/5.8/validation#custom-validation-rules中所述),您不应将参数传递给自定义规则实例。 Laravel为您做到了。
因此:
@Override
public void configure(HttpSecurity http) throws Exception {
http
...
.and()
.authorizeRequests()
.antMatchers("my-path/**").authenticatedWithUserPassword("user", "pswd")
}
成为:
new CheckDeliveryDate($client_id)
祝你有美好的一天!
答案 1 :(得分:0)
JSON格式日期错误。这是一个了不起的错误...