Yii2: validação no formulário com duas instâncias do mesmo modelo
Eu tenho uma reserva de modelo com os campos shipping_address e billing_address, ambos do endereço do modelo. Agora, quero imprimi-los da mesma forma, que basicamente funciona muito bem, o problema é que os campos dos dois modelos têm os mesmos IDs. Por exemplo, o campo "zip" no endereço de envio tem o ID "zip" e o "zip" no endereço de cobrança também possui "ID" como seu ID.
Se agora eu preencher o formulário, ele valida os dois campos ao mesmo tempo, enquanto apenas um deles é verdadeiro.
Eu já alterei os nomes dos campos para Shippping_Address ['zip'] e Billing_Address ['zip'], portanto, o controlador é capaz de reconhecer os dois modelos.
Veja como os campos são impressos:
<?= $form->field($billing_address, 'address_line_1')->textInput(['maxlength' => 45, 'name'=> 'Billing_Address[address_line1]']); ?>
<?= $form->field($billing_address, 'address_line_2')->textInput(['maxlength' => 45, 'name'=> 'Billing_Address[address_line2]']) ?>
<?= $form->field($billing_address, 'zip')->textInput(['maxlength' => 11, 'name'=> 'Billing_Address[zip]']) ?>
<?= $form->field($billing_address, 'city')->textInput(['maxlength' => 45, 'name'=> 'Billing_Address[city]']) ?>
<?= $form->field($billing_address, 'country')->textInput(['maxlength' => 45, 'name'=> 'Billing_Address[country]']) ?>
<?= $form->field($shipping_address, 'address_line_1')->textInput(['maxlength' => 45, 'name'=> 'Shipping_Address[address_line1]']); ?>
<?= $form->field($shipping_address, 'address_line_2')->textInput(['maxlength' => 45, 'name'=> 'Shipping_Address[address_line2]']) ?>
<?= $form->field($shipping_address, 'zip')->textInput(['maxlength' => 11, 'name'=> 'Shipping_Address[zip]']) ?>
<?= $form->field($shipping_address, 'city')->textInput(['maxlength' => 45, 'name'=> 'Shipping_Address[city]']) ?>
<?= $form->field($shipping_address, 'country')->textInput(['maxlength' => 45, 'name'=> 'Shipping_Address[country]']) ?>
Edit: Depois de implementar a resposta de tony:
<?= $form->field(
$shipping_address,
'address_line_1',
[
'selectors' => [
'input' => '#shipping-address_line_1',
'container' => '.shipping-address_line_1'
],
'options' =>
['class' => 'shipping-address_line_1']
])->textInput([
'maxlength' => 45,
'name'=> 'Shipping_Address[address_line1]',
'id'=>'shipping-address_line_1',
]); ?>
Também mudei a classe de contêiner porque era a mesma que a do outro campo. Agora o segundo campo (com o código mostrado acima) está funcionando perfeitamente. O problema é que o primeiro campo (com o código inalterado) não está mais validando.
Como isso poderia ser resolvido?