Laravel 9:经确认的特征

ajsxfq5m  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(112)

我创建了一个trait和一个控制器一起使用,控制器应该启动trait函数,这个函数验证它的输入,然后执行一个操作。
在FooController.php中:

[..]
$do_stuff = $this->create_stuff($input);

特点:

<?php
    namespace App\Traits;
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Str;
    [..]
    use Illuminate\Support\Facades\Validator;
    
    trait Foo
    {
       public function create_stuff(Request $input)
        {
            // validation part
            $validatedData = $input->validate([
                    'Value' => 'required|numeric',
                    ]);
            // end of validation part

    [..]

如果没有验证部分,一切都很正常,但我一添加它,就得到了错误:

Argument 1 passed to App\\Http\\Controllers\\FooController::create_stuff() must be an instance of Illuminate\\Http\\Request, instance of stdClass given,[..]

我知道$input是一个“普通”(?)PHP对象,而且似乎验证只对“请求”对象有效,那么我该如何做呢?

wmomyfyw

wmomyfyw1#

首先,请不要创建用于验证的trait,使用PHP Artisan创建用于验证的请求

PHP artisan make:request Your_request_name

并在请求中添加验证,如下所示

public function rules()
    {
        return [
            'sponsor_name' => ['required', 'string'],
            'sponsor_type' => ['required', 'string'],
            'mobile' => ['required', 'string'],
            'email' => ['required', 'string'],
            'nationality' => ['required', 'string'],
            'sponsor_issued_from' => ['required', 'string'],
            'sponsor_issued_date' => ['required', 'date'],
            'sponsor_address' => ['required', 'string'],
        ];
    }

    public function authorize()
    {
        return true;
    }

然后在请求中添加验证,然后在控制器函数中调用请求
例如

public function (Your_request_name $request)
{
...
}

相关问题