Matrix field validation on guest entry submission First I illustrate the way I set up guest entry form.

Let's say I have channels blog product and comment cart.

Guest entry submits to the comment cart channel. Form lives in template which I use to show blog's product's entry.

Now I just send required field title which won't get passed by validation unless it isn't blank.

According to Guest Entries settings to show my blog's product's content along with my guest entry form I have to change the name of entryVariable key from entry to whatever not taken variable name let's say entryError in an event of validation error to not overwrite blog's product's variable entry.

In short this is how the template looks like when blog product entry load. This is just part of the form which is executed when first item is added to the cart matrix field in cart channel.

{# Product's title #}
{{ entry.title }}

{# Product's text #}
{{ entry.text }}


{# Show form error #}
{% macro errorList(errors) %}
    {% if errors %}
        &lt;ul class="errors"&gt;
            {% for error in errors %}
                &lt;li&gt;{{ error }}&lt;/li&gt;
            {% endfor %}
        &lt;/ul&gt;
    {% endif %}
{% endmacro %}

{% from _self import errorList %}


&lt;form method="post" accept-charset="UTF-8"&gt;
    {{ getCsrfInput() }}
    &lt;input type="hidden" name="action" value="guestEntries/saveEntry"&gt;
    &lt;input type="hidden" name="sectionId" value="2"&gt;

    &lt;input type="hidden" name="title" value="Some dynamic title"&gt;


    {# Matrix field "cart" #}
    {# Block type field we want the product to save in. #}
    &lt;input type="hidden" name="fields[cart][new1][type]" value="product"&gt;

    &lt;input type="hidden" name="fields[cart][new1][fields][productTitle]" value="{{ entry.title }}"&gt;

    {# Quantity #}
    &lt;label&gt;Quantity *&lt;/label&gt;
    &lt;select id="qntySlct" name="fields[cart][new1][fields][productQuantity]"&gt;
        &lt;option value=""&gt;--Please, select the quantity--&lt;/option&gt;
        {% for i in 1..10 %}
            &lt;option value="{{ i }}"{% if productQuantity == i %} selected{% endif %}&gt;{{ i }}&lt;/option&gt;
        {% endfor %}
        &lt;option value=""&gt;I need more&lt;/option&gt;
    &lt;/select&gt;

    {# Error message #}
    {% if entryError is defined %}
        &lt;div class="errMsg"&gt;
            {{ errorList(entry.getErrors('productQuantity')) }}
        &lt;/div&gt;
    {% endif %}

&lt;/form&gt;


Form submits if title quantity is defined and if not I get entryError defined but don't get the title's quantity's  error shown.

The warning of title's quantity's error is logged in the Application Log.
Have anyone came accross this unlikely issue?

CORRECTION UPDATE

Thanks to the Robin's comment bellow to debug it with {{ dump() }} function I found out that input quantity field with variable title is returning the error value. However I didn't mentioned in my question that I'm actually posting/retrieving to/from matrix field as I didn't want to make the question pointlessly complicated with all those fields I've set. 

I've been misleaded/figured that to access field's variable in 

{{ errorList(entry.getErrors('variable')) }} for example, is not valid for matrix field. 

Now I can't find any info on how to access matrix field for entry validation using: 

{% macro errorList(errors) %}{% endmacro %}.
To grab validation error of a matrix field -> first block type -> field, you must access entry's matrix field with the function first() and than access block type field using getError("fieldHandle") function at the end of ElementCriteriaModel like so.

{{ entry.matrixField.first().getError("customFieldHandle") }}


or to the question related problem

{{ entryError.cart.first().getError("productQuantity") }}


Doing this way you don't have to loop through Matrix's blocks and it make sense if you need to access first block type only or you have only one block type.

To show validation error under each block.type of a custom field you'll have to loop in MatrixBlockModel of the cart channel like so.

{% if entryError is defined %}
    {% for block in entryError.cart %}
        {% if block.getErrors() %}
            {{ block.getError('productQuantity') }}
        {% endif %}
    {% endfor %}
{% endif %}


Like Brad pointed out to me in support ticket "you can decide how you want to display them".