Adicionei um campo oculto à seção de entrega do checkout. Se o campo estiver visível - a validação funciona, mas se eu o ocultar - qualquer validação está faltando.
É necessário evitar ir mais longe do envio ao pagamento clicando no botão "Avançar" e exibir uma mensagem de erro ou alerta ao usuário.
Existe maneira de fazer isso via LayoutProcessor?
Ou para estender a validação magento no meu módulo para esse fim?
Outras versões também serão úteis.
UPD: Talvez isso seja útil para responder. No momento, estou tentando fazer a validação semelhante ao campo de e-mail no checkout. A idéia é a próxima. Crie um formulário personalizado (como um campo de email localizado em um formulário separado) e valide-o de acordo com este documento http://devdocs.magento.com/guides/v2.0/howdoi/checkout/checkout_form.html#template
<?php
namespace Modules\Deliverydate\Model\Checkout;
class LayoutProcessorPlugin
{
/**
* @param \Magento\Checkout\Block\Checkout\LayoutProcessor $subject
* @param array $jsLayout
* @return array
*/
public function afterProcess(
\Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
array $jsLayout
) {
$jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
['shippingAddress']['children']['shipping-address-fieldset']['children']['delivery_slot'] = [
'component' => 'Magento_Ui/js/form/element/abstract',
'config' => [
'customScope' => 'shippingAddress',
'template' => 'ui/form/field',
// 'elementTmpl' => 'ui/form/element/date',
'options' => [],
'id' => 'enteredSlot'
],
'dataScope' => 'shippingAddress.enteredSlot',
'label' => 'Delivery Slot',
'provider' => 'checkoutProvider',
'visible' => false,
'validation' => [
// 'required-entry' => true,
'validate-no-empty' => true,
],
'sortOrder' => 1,
'id' => 'enteredSlot'
];
return $jsLayout;
}
}
fonte
Respostas:
Você pode simplesmente criar seu próprio elemento com o processo de validação modificado para essa finalidade. Na sua extensão, crie um novo arquivo
view/base/web/js/form/element/custom.js
com o seguinte conteúdo:Em LayoutProcessorPlugin, altere o valor 'component' para o elemento recém-criado:
Dessa forma, você pode estender o elemento Abstract e modificar o método "validate" removendo a verificação de visibilidade do campo etc. Neste exemplo, a mensagem de erro está sendo mostrada como um alerta, mas você pode usar o que quiser. Espero que ajude.
fonte