Как использовать класс Request для проверки - PullRequest
0 голосов
/ 18 марта 2019

Как я могу проверить запрос без внедрения зависимости?

Мне нужно проверить две разные вещи в одной и той же публикации. Например, мне нужно выполнить базовую проверку для записи, но также мне нужно проверить информацию о кредитной карте, способ оплаты может измениться, поэтому я не добавляю данные кредитной карты в запросе базовой записи.

В моем методе у меня есть:

public method create (EntryRequest $request) {

Validator::make($request->all(), 
[rules] 
}

Но у меня уже есть свои правила в CreditCardRequest. Как я могу применить правила к этому запросу?

Like Validator::make($request->all(), new CreditCardRequest())

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Вы можете выполнить условную проверку в классах запросов формы. Поэтому, если вы хотите проверять только поля кредитной карты, если payment_method равно card, то вы можете сделать это следующим образом:

class StorePaymentRequest extends FormRequest
{
    public function rules()
    {
        return [
            'payment_method' => ['required', 'in:card,paypal'],
            // Any other basic rules for the request
        ];
    }

    public function withValidator($validator)
    {
        // Conditionally add validation rules depending on incoming data

        $validator->sometimes('card_number', 'required', function ($input) {
            return $input->payment_method == 'card';
        });

        $validator->sometimes('expiry_date', 'required', function ($input) {
            return $input->payment_method == 'card';
        });

        $validator->sometimes('cvc', 'required', function ($input) {
            return $input->payment_method == 'card';
        });
    }
}

Документация: https://laravel.com/docs/5.8/validation#conditionally-adding-rules

0 голосов
/ 18 марта 2019

Я полагаю, что вы имеете в виду, как это! Вы включаете свой собственный файл StoreRequest и используете его для проверки таким образом.

use App\Http\Requests\CreditCardRequest;

public function store(CreditCardRequest $request)
{    
    $data = $request->validated();
}
...