Laravel-是否可以使用Illuminate \ Foundation \ http \ formrequest验证获得通配符的请求;

发布于 2025-01-26 21:00:50 字数 915 浏览 1 评论 0 原文

我有一条通配符的路线。

这一天通配符是这样的弦:20220507(yyymmdd)。

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

我的问题是,是否可以用 Illuminate \ Foundation \ http \ formrequest ou Illuminate \ http \ request 来验证字符串。 make:request ?还是他们只有accepet帖子请求?

代码:

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
}

或示例控制器

use Illuminate\Http\Request;

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

2中的路由2我遇到了错误:无限重定向环,将其重定多次。

I have a GET route with a wildcard day.

This day wildcard is a string like so: 20220507 (YYYYMMDD).

After validation the string I wish to make a proper response. Before sending the response I want to validate the string length and the format.

My question is, is it possible to validate the string with Illuminate\Foundation\Http\FormRequest ou Illuminate\Http\Request
make:request ? Or they only accepet Post Requests ?

Code:

php artisan make:request CalendarDayRequest

Example get route in web.php

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

Example Controller

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

Or Example Controller 2

use Illuminate\Http\Request;

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

Both of them I got the error: infinite redirect loop, redirected it too many times.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痴情 2025-02-02 21:00:50

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

参数
示例:

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()函数。

Firstly, you can not validate route parameters inside Form Request

But, you can use regex for validating your route
Example:

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])$/');

If You still want to use validate() function or Form Request

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

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

Form Request Way - Override all() method

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

If Nothing Works, Try Following code

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 how to validate route parameters?

But I would suggest you to send it as request parameter if you want to use validate() function.

请持续率性 2025-02-02 21:00:50

在示例1中:

您应该在calendardayrequest中覆盖此方法:

protected function failedValidation(Validator $validator) {
    throw (new ValidationException($validator))
                ->errorBag($this->errorBag)
                ->redirectTo($this->getRedirectUrl());
}

如果客户端期望JSON,Laravel将返回JSON字段而不是重定向。您可以通过更改此方法或在app \ extesbions \ handler中自定义渲染方法来完全更改此行为。

在示例2中:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

public function calendar ( Request $request ) {
    $validator = Validator::make($request->all(), ['day'=>'required']);

    if ($validator->fails()) {
        $errors = $validator->errors();
        $messages = $validator->errors()->messages();
        $messageBag = $validator->errors()->getMessageBag();
    };
}

因此,您可以使用验证器的消息通知客户端。

In Example 1:

You should overwrite this method in CalendarDayRequest:

protected function failedValidation(Validator $validator) {
    throw (new ValidationException($validator))
                ->errorBag($this->errorBag)
                ->redirectTo($this->getRedirectUrl());
}

If client expects json, laravel will return a json field instead of redirection. You can completely change this behavior by changing this method or customizing render() method in App\Exceptions\Handler.

In Example 2:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

public function calendar ( Request $request ) {
    $validator = Validator::make($request->all(), ['day'=>'required']);

    if ($validator->fails()) {
        $errors = $validator->errors();
        $messages = $validator->errors()->messages();
        $messageBag = $validator->errors()->getMessageBag();
    };
}

So you can use messages of validator for informing client.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文