に存在する場合時にはフィールドを無視します。私は「時々」機能は、おそらく行くには最高の方法であることが、配列との機能を実装する方法を知っていますか?Laravelの検証配列 - 別のフィールドには、私はLaravelアプリケーションのためのいくつかの検証ルールを書いていると、別のフィールドが存在する場合、私はいくつかのフィールドを無視する必要が配列
最初の試み(Laravelはフィールドが存在する任意の時間を検証しているため、動作しませんでした):
// Device Rules
$deviceRules = [
'devices' => 'required|array|min:1',
'devices.*.id' => 'integer',
'devices.*.network' => 'max:255',
'devices.*.code' => "required_without:devices.*.id|max:255|unique:devices,code",
'devices.*.make_id' => 'required_without:devices.*.id|in:' . Make::getImplodedKeys(),
'devices.*.model_id' => 'required_without:devices.*.id|in:' . DeviceModel::getImplodedKeys(),
'devices.*.fault_id' => 'required|array|min:1',
'devices.*.fault_id.*' => 'in:' . Fault::getImplodedKeys(),
'devices.*.warranty' => 'required|boolean'
]
使用してだから私の第二の試み「時には()」(しかし、私はしないでください非常にこれを実装する方法を知っている):。
public function rules()
{
// Device Rules
$deviceRules = [
'devices' => 'required|array|min:1',
'devices.*.id' => 'integer',
'devices.*.network' => 'max:255',
'devices.*.fault_id' => 'required|array|min:1',
'devices.*.fault_id.*' => 'in:' . Fault::getImplodedKeys(),
'devices.*.warranty' => 'required|boolean'
];
return $deviceRules ;
}
protected function getValidatorInstance(){
$validator = parent::getValidatorInstance();
$validator->sometimes('devices.*.code', 'required|max:255|unique:devices,code', function($input)
{
return isset($input->devices.*.id);
});
$validator->sometimes('devices.*.make_id', 'required|in:' . Make::getImplodedKeys(), function($input)
{
return isset($input->devices.*.id);
});
$validator->sometimes('devices.*.model_id', 'required|in:' . DeviceModel::getImplodedKeys(), function($input)
{
return isset($input->devices.*.id);
});
return $validator;
}
私は明らかにそれが動作しませんので、これは、return isset($input->devices.*.id);
は間違いなく、エラーがスローされますテストしていません。これを適切に実装するにはどうすればよいですか?
あなたは時々フィールドが必要なときのためにvaidationロジックを指定してくださいすることができますか? – pseudoanime
@pseudoanimeご意見ありがとうございます。私は今解決策を見つけました。 –