在 Laravel 中使用 Illuminate\Foundation\Http\FormRequest 验证获取通配符请求是否可行?
P粉087951442
P粉087951442 2024-03-27 17:23:42
0
1
482

我有一条带有通配符日期的 GET 路线。

这一天通配符是一个字符串,如下所示:20220507 (YYYYMMDD)。

验证字符串后我希望做出正确的响应。在发送响应之前,我想验证字符串长度和格式。

我的问题是,是否可以使用 Illuminate\Foundation\Http\FormRequestIlluminate\Http\Request 验证字符串 制作:请求?或者他们只接受发布请求?

代码:

php artisan make:request CalendarDayRequest

web.php 中获取路由的示例

Route::get('/calendar/{day}' , 'App\Http\Controllers\HomeController@calendar')->name('calendar');

示例控制器

use App\Http\Requests\CalendarDayRequest; 
public function calendar ( CalendarDayRequest $request ) {
    // Code
}

或者示例控制器 2

use Illuminate\Http\Request;

public function calendar ( Request $request ) {
    $validated = $request->validate([
        'day' => 'required',
     ]);
}

我都收到错误:无限重定向循环,重定向太多次。

P粉087951442
P粉087951442

全部回复(1)
P粉706038741

首先,您无法验证表单请求中的路由参数

但是,您可以使用正则表达式来验证您的路线 示例:

Route::get('/calendar/{day}', 'App\Http\Controllers\HomeController@calendar')
    ->name('calendar')
    ->where('day', '/^[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])$/');

如果您仍想使用validate()函数或表单请求

$request->merge([
   'day' => $day
]);

$this->validate($request, [
   'day' => 'date_format:Ymd',
]);

表单请求方式 - 重写 all() 方法

public function all($k = null){
   $data = parent::all($k);
   $data['day'] = $this->route('day');
   return $data;
}

如果不起作用,请尝试以下代码

public function calendar(Request $request, $day){
 $data = $request->all();
 $data['day'] = $day; 

 $validator = Validator::make($data, [
   'day' => 'required|date_format:Ymd',
 ]);
  
 if($validator->fails()){
    // Do Something abort(404);
 }

}

Laravel 5 如何验证路由参数?

但是如果您想使用 validate() 函数,我建议您将其作为请求参数发送。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板