我有一條帶有通配符日期的 GET 路線。
這一天通配符是一個字串,如下所示:20220507 (YYYYMMDD)。
驗證字串後我希望做出正確的回應。在發送回應之前,我想驗證字串長度和格式。
我的問題是,是否可以使用 Illuminate\Foundation\Http\FormRequest 或 Illuminate\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粉7060387412024-03-28 09:30:04
首先,您無法驗證表單要求中的路由參數
但是,您可以使用正規表示式來驗證您的路線 範例:
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); } }
但是如果您想使用 validate()
函數,我建議您將其作為請求參數發送。