Magento – Magento 2: theme xml for custom phone validation in checkout

checkoutmagento2validation

I've created my own validation rule phonePL in

app/design/frontend/Me/myskin/Magento_Ui/web/js/lib/validation/rules.js

I can activate it in

Magento/Checkout/view/frontend/layout/checkout_index_index.xml

By adding my validation rule in telephone item like so:

<item name="telephone" xsi:type="array">
    <item name="config" xsi:type="array">
        <item name="validation" xsi:type="array">
            <item name="phonePL" xsi:type="string">true</item>
        </item>
        <item name="tooltip" xsi:type="array">
            <item name="description" xsi:type="string" translate="true">For delivery questions.</item>
        </item>
    </item>
</item>

But how should I overwrite just this one telephone item in my theme? I dont want to do it directly in magento directory. I've got an xml file:

app/design/frontend/Me/myskin/Magento_Checkout/layout/checkout_index_index.xml

but I don't know what exactly should its structure look like?

Best Answer

This helped me: http://devdocs.magento.com/guides/v2.0/howdoi/checkout/checkout_edit_form.html

The whole xml that worked for me:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
    <referenceBlock name="checkout.root">
        <arguments>
            <argument name="jsLayout" xsi:type="array">
                <item name="components" xsi:type="array">
                    <item name="checkout" xsi:type="array">
                        <item name="children" xsi:type="array">
                            <item name="steps" xsi:type="array">
                                <item name="children" xsi:type="array">
                                    <item name="shipping-step" xsi:type="array">
                                        <item name="children" xsi:type="array">
                                            <item name="shippingAddress" xsi:type="array">
                                                <item name="children" xsi:type="array">
                                                    <!-- The name of the form the field belongs to -->
                                                    <item name="shipping-address-fieldset" xsi:type="array">
                                                        <item name="children" xsi:type="array">
                                                            <!-- the field you are customizing -->
                                                            <item name="telephone" xsi:type="array">
                                                                <item name="validation" xsi:type="array">
                                                                    <item name="phonePL" xsi:type="string">true</item>
                                                                </item>
                                                                <item name="config" xsi:type="array">
                                                                    <item name="tooltip" xsi:type="array">
                                                                        <item name="description" xsi:type="string" translate="true">For delivery questions.</item>
                                                                    </item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </item>
            </argument>
        </arguments>
    </referenceBlock>
</body>
</page>