作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我找到了方法 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()
方法
使用方法:
php artisan make:request UpdateLanguageRequest
UpdateLanguageRequest
类的 rules()
方法中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)]);
}
}
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/
我是一名优秀的程序员,十分优秀!