Laravel Пользовательская проверка рюкзака по нескольким атрибутам - PullRequest
0 голосов
/ 14 июля 2020

Как настроить индивидуальную проверку нескольких атрибутов в обновлении контроллера CRUD Laravel Backpack?

Допустим, у меня есть ZIP, CITY, DELIVERY_PICKUP и DELIVERY_SHIPPING. И скажем, мои требуемые правила:

  1. нужно выбрать одно из DELIVERY_PICKUP и / или DELIVERY_SHIPPING
  2. если выбран DELIVERY_SHIPPING ZIP и CITY необходимо заполнить

Можно написать собственные правила проверки с несколькими атрибутами в laravel, например,

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class Delivery implements Rule
{

    public $delivery_shipping;
    public $delivery_pick_up;
    public $zip;
    public $city;

    public function __construct($delivery_shipping,$delivery_pick_up,$zip,$city)
    {
        $this->delivery_shipping = $delivery_shipping;
        $this->delivery_pick_up = $delivery_pick_up;
        $this->zip = $zip;
        $this->city = $city;
    }

Но как мне поместить его в Backpacks FormRequest и заполнить его значениями?

namespace App\Http\Requests;

use App\Http\Requests\Request;
use Illuminate\Foundation\Http\FormRequest;

class AdvertRequest extends FormRequest
{

    public function rules()
    {
        return [
            'title' => 'required|min:5|max:255',
            'frontend_user_id' => 'required',
            'profile_type' => 'required',
            'advertisement_type' => 'required',
            'marketplace_category_id' => 'required',
            'price' => 'numeric|nullable',
            'price_mode' => 'required',
            'content' => 'required',
            'zip' => 'required|numeric',
            'city' => 'required|min:1|max:255',
            'delivery_shipping' => 'Delivery',
        ];
    }

1 Ответ

1 голос
/ 29 июля 2020

Я думаю, что вы можете сделать это без специальной проверки.

  1. Чтобы подтвердить, что выбран один из delivery_pickup и / или delivery_shipping, вы можете использовать required_without validation:
'delivery_shipping' => 'required_without:delivery_pickup',
'delivery_pickup' => 'required_without:delivery_shipping',
Для проверки почтового индекса и города вы можете использовать required_with valdiation:
'zip' => 'required_with:delivery_shipping',
'city' => 'required_with:delivery_shipping',

Все вместе:

rules = [
    'delivery_shipping' => 'required_without:delivery_pickup',
    'delivery_pickup' => 'required_without:delivery_shipping',
    'zip' => 'required_with:delivery_shipping',
    'city' => 'required_with:delivery_shipping',
];
...