此标记引用了使用Laravel验证应用程序传入数据的不同方法。
如何使用请求验证来验证 Laravel 控制器中的表单数据?
我必须在 Laravel 中为 Web 应用程序构建用户注册表单。该表格应从用户收集以下数据: 姓名:用户的全名。 电子邮件:用户的电子邮件地址。 帕斯沃...
为什么在 Livewire 应用程序中调用自定义规则会引发错误?
在 laravel 11 / livewire 3.5 应用程序中我使用命令创建了一个自定义规则: php artisan make:规则 LocationIsValidRule 并有一个带有声明的文件: 在 laravel 11 / livewire 3.5 应用程序中我使用命令创建了一个自定义规则: php artisan make:rule LocationIsValidRule 并有一个带有声明的文件: <?php namespace App\Rules; use App\Library\Services\Interfaces\GetGeoLocationInterface; use Closure; use Illuminate\Contracts\Validation\ValidationRule; class LocationIsValidRule implements ValidationRule { public function validate(string $attribute, mixed $value, Closure $fail): void { // geo location with spatie package would be run if location string is valid. ... 我在 Livewire 组件中使用它: class MyComponent extends Component { ... protected function rules() { return [ 'title' => [ 'required', ... ], 'location' => [ 'required', 'string', 'min:3', 'max:100', [new LocationIsValidRule()], ], ]; } 但是在验证时我遇到了错误: trim(): Argument #1 ($string) must be of type string, App\Rules\LocationIsValidRule given 并指着: $this->validate(); 行存储方法。 我在 https://livewire.laravel.com/docs/validation#using-custom-validators 阅读了文档,但看起来情况有些不同> 如何在 Livewire 应用程序中调用自定义验证? 更新: 不确定是否有命令 php artisan make:rule 在这种情况下有效,哪种格式必须在 livewire 中具有自定义验证规则? 您应该删除自定义规则周围的括号 'location' => [ 'required', 'string', 'min:3', 'max:100', new LocationIsValidRule(), ], 参见 https://laravel.com/docs/11.x/validation#custom-validation-rules
在 laravel / livewire 站点项目模型具有唯一的“标题”字段,我在验证属性中添加了唯一的 ItemEditor 类扩展了 Component { #[验证('必需|字符串|最小值:3|最大值:255|
我想验证数组输入值是否已选择。就我而言,我使用 Laravel Livewire 并且有动态输入,例如我可以添加新选项,例如大小、颜色。但我不...
我通过 php artisan make:rule 创建了一个简单的自定义验证规则,现在我想为其编写单元测试。 如何测试验证规则是否通过? 由于 $rule->validate() 不...
我正在尝试根据另一个字段的有效性来验证一个字段,但似乎找不到答案。要么是我在搜索方面太笨了,要么是它的痛苦显而易见,但我找不到满意的......
我尝试了一些验证规则,例如:带有嵌套数组字段的布尔值和必需文件,但总是失败 例如,我尝试创建这样的表单请求: 我尝试了一些验证规则,例如:Boolean和Requiredfile以及nested array字段,但总是失败 例如,我尝试像这样创建表单请求: <?php namespace App\Http\Requests\Test; use Illuminate\Foundation\Http\FormRequest; class Test extends FormRequest { public function validationData() { return [ 'booleanField' => $this->boolean("booleanField"), 'fileField' => $this->boolean("fileField"), 'arrayField' => $this->input("arrayField"), 'arrayField.*.booleanField' => $this->boolean("arrayField.*.booleanField"), 'arrayField.*.fileField' => $this->file("arrayField.*.fileField"), ]; } public function rules(): array { return [ "booleanField" => ["required", "boolean"], // <= works as expected "fileField" => ["required", "file", "mimes:jpg,png,jpeg,docx,xlsx,zip", "max:5120"], // <= works as expected "arrayField" => ["required", "array"], "arrayField.*.booleanField" => ["required", "boolean"], // <= not working, always returning error "The arrayField.0.booleanField field must be true or false." "arrayField.*.fileField" => ["required", "file", "mimes:jpg,png,jpeg,docx,xlsx,zip", "max:5120"], // <= not working, always returning error "The arrayField.0.fileField is required." ]; } } 这就是我发现的。我不知道其他规则是否也不起作用。 Laravel 版本 11.31.0。 谢谢你。 来自#53489的重复问题 方法 validationData 应该是 you 访问将要验证的数据的一种方式。它并不意味着覆盖数据。 当 FormRequest 被解析时,应用程序(或容器,如果您愿意)将调用其 validateResolved 方法。 public function validateResolved() { $this->prepareForValidation(); if (! $this->passesAuthorization()) { $this->failedAuthorization(); } $instance = $this->getValidatorInstance(); if ($this->isPrecognitive()) { $instance->after(Precognition::afterValidationHook($this)); } if ($instance->fails()) { $this->failedValidation($instance); } $this->passedValidation(); } 如果您想修改即将验证的数据,您正在寻找的方法是prepareForValidation。据我所知,你不能像通配符一样使用 * 。 class Test extends FormRequest { /** * Prepare the data for validation. * * @return void */ public function prepareForValidation(): void { // please check this and make sure the data you're sending looks like the data you're trying to validate. dd($this->validationData()); $this->merge([ 'key' => 'value, ... ]); } ... }
PHPUnit 和 Laravel 响应 401 状态代码,它应该返回 422
我正在学习 Laravel 11,我在使用 PHPStorm 时遇到了第一个问题(我不知道这是否是我的测试)。 我有这个控制器: 我正在学习 Laravel 11,我在使用 PHPStorm 时遇到了第一个问题(我不知道这是否是我的测试)。 我有这个控制器: <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class LoginController extends Controller { public function login(Request $request) { $request->validate([ 'email' => 'email|string', 'password' => 'required|min:8', ]); $credentials = request(['email', 'password']); if (!$token = auth()->attempt($credentials)) { return jsonResponse(status: 401, message: 'Unauthorized'); } return jsonResponse(data: [ 'token' => $token, 'expires_in' => auth()->factory()->getTTL() * 60 ]); } } 我的测试代码: public function test_email_must_be_required(): void { $credentials = ['password' => 'password']; $response = $this->postJson("{$this->apiBase}/login", $credentials); $response->assertStatus(422); $response->assertJsonStructure(['message', 'data', 'status', 'errors' => ['email']]); $response->assertJsonFragment(['errors' => ['email' => ['The email field is required.']]]); } 但是当我运行测试时,我得到以下响应: 但是,它不应返回 401,因为测试凭据中的电子邮件未发送。它应该返回响应代码 422。 [编辑] 当我更改验证方法时: ... 'email' => 'required|email|string', ... 我的代码响应是 200: [编辑2] 这是我的routes/api.php代码: 'email' => 'email|string', 此规则检查电子邮件是否是有效的电子邮件格式并且是字符串。但是,该字段未标记为必填字段。因此,如果请求中未提供电子邮件,验证不会失败,并且请求将继续进行下一步(auth()->attempt()),最终由于缺少凭据而返回 401 未经授权的响应。
我在 Laravel 10 中进行了验证,其中包含 company_description 的验证。我希望当其他两个字段具有指定值时需要它。我得到这个代码: “公司描述”=> ...
我们有这个验证码: $数据 = [ [1,2,3], [3,4,5] ]; $validator = \Validator::make([ “bla” => $数据, ],[ 'bla' => '必需|数组', '布拉....
我正在尝试应用这个问题How to validate array in Laravel? 中提供的建议。 所以我的验证是 '主题' => '必需|数组' 主题为必填项 这尤其有效...
我有以下来自表单提交的数据: [ “可用性”=> [ "z" => ["一些数据"], "2" => ["一些数据"], ]...
如何使用这种格式返回自定义错误消息? $this->验证($请求, [ '东西' => '必需' ]);
从纯数字的 zip 式输入中删除破折号后,请求验证(大小或数字)失败
我有一个巴西邮政编码,需要验证。我正在使用输入掩码来使其在 JS 中看起来更好并进行验证。 格式为:99999-999。所以 5 位数字,一个破折号,然后 3 位数字。 然后...
在 Laravel 唯一验证 where 子句中检查支持枚举的标量值
在带有 PHP 8.1 的 Laravel 9 中,我无法比较 Laravel 验证规则中可以使用 ->where 子句的支持枚举。它需要一个标量值来比较。还有其他方法可以比较...
在 laravel 11 网站上,我需要检查从 0 到 100 的十进制值(可能有 2 位小数),我按照规则执行此操作: ['必需', '数字', '介于:0,100'], 或者 必需|数字|最小值:0.01|最大值:100 ...
假设我正在构建一个小型应用程序,其中一小部分负责在提交联系表单时发送电子邮件。我只想在联系表通过一些 sim 时才这样做...
我在控制器存储函数中有此代码来验证输入标签的值 $c = count(Input::get('部门名称') ); $divs_ids = 输入::get('部门名称'); $grade_name =输入::获取(...
使用验证规则(Laravel 验证)检查表 A 或表 B 中是否存在 UUID?
在我的 Laravel 应用程序中,我想使用验证规则检查字段 uuid 的值是否存在于表 course 或表 contingents 中。 UUID 必须出现在其中之一...
我正在尝试缩短我的控制器代码,并且我想知道在验证和存储时与 Laravel 一起使用的约定。 控制器 公共函数存储(请求$请求) { // 验证...