gpt4 book ai didi

php - 如何在 laravel 验证后修改请求输入?

转载 作者:搜寻专家 更新时间:2023-10-31 21:57:52 24 4
gpt4 key购买 nike

我找到了方法 Request::replace , 允许替换请求中的输入参数。

但目前我只能看到一种实现它的方法——在每个 Controller 操作中编写相同的替换输入代码。

是否有可能以某种方式对代码进行分组,这些代码将在请求成功验证后但在 Controller 操作开始之前执行?

例如,我需要在我的 api 中支持 ISO2 语言,但在幕后,我必须将它们转换为真正存储在数据库中的遗留语言。目前我在 Controller 中有这段代码:

// Controller action context
$iso = $request->input('language');
$legacy = Language::iso2ToLegacy($iso);
$request->replace(['language' => $legacy]);

// Controller action code starts

最佳答案

我认为您正在寻找的是 ValidatesWhenResolvedTrait 特征中的 passedValidation() 方法

使用方法:

  1. 创建自定义请求:php artisan make:request UpdateLanguageRequest
  2. 将验证规则放入 UpdateLanguageRequest 类的 rules() 方法中
  3. 使用passedValidation()方法在验证成功后对请求对象进行任何操作
namespace App\Http\Requests;

use App\...\Language;

class UpdateLanguageRequest extends FormRequest
{
public function authorize()
{
return true;
}


public function rules()
{
return [
// here goes your rules, f.e.:
'language' => ['max:255']
];
}


protected function passedValidation()
{
$this->replace(['language' => Language::iso2ToLegacy($this->language)]);
}
}

  1. 在 Controller 中使用 UpdateLanguageRequest 类代替 Request
public function someControllerMethod(UpdateLanguageRequest $request){
// the $request->language data was already modified at this point
}

*也许您想使用 merge 而不是 replace 方法,因为 replace 将替换请求中的所有其他数据,而 merge 方法将替换仅特定值

关于php - 如何在 laravel 验证后修改请求输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31662977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com