Saya menggunakan BackpackForLaravel dan saya memiliki bidang tipe table dalam kode saya:

$this->crud->addField([
    'label'           => 'Contact persons',
    'name'            => 'contact',
    'type'            => 'table',
    'entity_singular' => 'contact',
    'columns'         => [
        'person' => 'Person',
        'email'  => 'Email',
        'number' => 'Phone number',
        'desc'   => 'Description',
    ],
    'attributes'        => [
        'required' => true
    ],
    'max'               => 5,
    'min'               => 1,
    'wrapper'           => [
        'class' => 'form-group col-12'
    ],
    'tab' => 'Contact data',
]);

CRUD berfungsi dengan baik, tetapi ketika saya menambahkan validasi, ada sesuatu yang tidak berfungsi dengan baik.

Kelas ClientRequest.php saya memiliki:

public function rules()
    {
        return [
            'cif'                            => "required|spanish_tax_number|unique:clients,cif,{$this->cif},cif",
            'name'                           => 'required|min:3|max:255',
            'address'                        => 'required|json',
            'weekly_rest'                    => 'nullable|array',
            'description'                    => 'nullable|max:255',
            'leaving_date'                   => 'nullable|date',
            'leaving_date'                   => 'nullable|date',
            'image'                          => 'nullable|image|mimes:jpeg,png',
            'contact'                        => 'required|array',
            'contact.*.person'               => 'required|email'
        ];
    }

contact validasi bidang bekerja dengan baik, tetapi ketika saya mencoba menggunakan contact.*.person untuk memvalidasi semua array bidang bernama person, tidak ada yang terjadi.

Saya menggunakan fungsi prepareForValidation untuk mengubah format bidang json ke format array:

protected function prepareForValidation()
    {
        $this->merge([
            'contact' => json_decode($this->input('contact'))
        ]);
    }

Jika saya membuang data input, saya dapat melihat bahwa fungsi prepareForValidation berfungsi dengan baik, tetapi validasinya tidak melakukan apa-apa.

Saya membaca tentang validasi array di sini:

Saya melakukan ini, dan berfungsi (lakukan validasi dalam fungsi pengontrol store/update):

Tapi, saya ingin melakukan ini tanpa kehebohan ini, mengkodekan semua di kelas ClientRequest.

Saya pikir saya baik-baik saja, tetapi tidak berhasil.

Apa yang saya lakukan salah di ClientRequest?


EDIT

Output request()->all() di dalam rules(), fungsi ClientRequest.php

array:15 [▼
  "_token" => "DGnGIZwertI6kupXwYgHr8as5MVbD2sPRlmbGJrK"
  "_method" => "PUT"
  "http_referrer" => "http://127.0.0.1:8000/admin/client?active=1"
  "id" => "21"
  "cif" => "123456789F"
  "name" => "Paco Porras SL"
  "address" => "Useful address, 1"
  "weekly_rest" => array:3 [▼
    0 => "2"
    1 => "3"
    2 => "4"
  ]
  "description" => "qweqwe"
  "discharge_date" => "2020-07-08"
  "leaving_date" => null
  "image" => null
  "contact" => "[{"person":"123123123","email":"sss.ssstyytrytr","number":"qwewqe","desc":"qweq"},{"person":"123123123","email":"123123","number":"123123","desc":"123213"}]"
  "current_tab" => "datos-de-empresa"
  "save_action" => "save_and_edit"
]

Keluaran setelah prepareForValidation:

array:15 [▼
  "_token" => "DGnGIZwertI6kupXwYgHr8as5MVbD2sPRlmbGJrK"
  "_method" => "PUT"
  "http_referrer" => "http://127.0.0.1:8000/admin/client?active=1"
  "id" => "21"
  "cif" => "123456789F"
  "name" => "Paco Porras SL"
  "address" => "Useful address, 1"
  "weekly_rest" => array:3 [▼
    0 => "2"
    1 => "3"
    2 => "4"
  ]
  "description" => "qweqwe"
  "discharge_date" => "2020-07-08"
  "leaving_date" => null
  "image" => null
  "contact" => array:2 [▼
    0 => {#1557 ▼
      +"person": "123123123"
      +"email": "sss.ssstyytrytr"
      +"number": "qwewqe"
      +"desc": "qweq"
    }
    1 => {#1556 ▼
      +"person": "123123123"
      +"email": "123123"
      +"number": "123123"
      +"desc": "123213"
    }
  ]
  "current_tab" => "datos-de-empresa"
  "save_action" => "save_and_edit"
]

EDIT 2

Saya melakukan ini di toko/perbarui fungsi ClientController.php:

$validate = Validator::make($request->all(), [
            'contact'                          => 'required|array',
            'contact.person'                   => 'required|string',
            "contact.*.person"                 => 'required|string',
        ]);

dd($validate->messages());

Dan outputnya adalah:

Illuminate\Support\MessageBag {#1520 ▼
  #messages: array:2 [▼
    "contact" => array:1 [▼
      0 => "El campo contact debe ser un array."
    ]
    "contact.person" => array:1 [▼
      0 => "El campo contact.person es obligatorio."
    ]
  ]
  #format: ":message"
}

Ada yang tidak berfungsi dengan baik karena 'contact.*.person' hilang.

0
Sakrow 11 Juli 2020, 23:14

1 menjawab

Jawaban Terbaik

Perubahan

'contact' => json_decode($this->input('contact'))

Di

'contact' => json_decode($this->input('contact'), true)

Dan tinggalkan aturan lamamu

0
Ramiz Kongulov 13 Juli 2020, 20:38