<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect2 id="zend.validate.set.notempty">
    <title>NotEmpty</title>

    <para>
        Ce validateur permet de déterminer si une valeur est non vide. C'est utile lorsque vous travaillez
        avec des formulaires ou des entrées utilisateur, là où vous pouvez l'utiliser pour savoir si des
        éléments requis ont été saisis.
    </para>

    <sect3 id="zend.validate.set.notempty.options">
        <title>Options supportées par Zend_Validate_NotEmpty</title>

        <para>
            Les options suivantes sont supportées par
            <classname>Zend_Validate_NotEmpty</classname>&#160;:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis><property>type</property></emphasis>&#160;: paramètre le type de
                    validation qui sera réalisée. Pour plus de détails, reportez vous à
                    <link linkend="zend.validate.set.notempty.types">cette section</link>.
                </para>
            </listitem>
        </itemizedlist>
    </sect3>

    <sect3 id="zend.validate.set.notempty.default">
        <title>Comportement par défaut de Zend_Validate_NotEmpty</title>

        <para>
            Par défaut, ce validateur fonctionne différement de la fonction
            <acronym>PHP</acronym> <methodname>empty()</methodname>. En particulier, ce validateur va
            évaluer l'entier <emphasis>0</emphasis> et la chaine '<emphasis>0</emphasis>' comme vides.
        </para>

        <programlisting language="php"><![CDATA[
$valid = new Zend_Validate_NotEmpty();
$value  = '';
$result = $valid->isValid($value);
// retourne false
]]></programlisting>

        <note>
            <title>Le comportement par défaut diffère de PHP</title>

            <para>
                Sans configuration ajoutée, <classname>Zend_Validate_NotEmpty</classname> diffère
                de <acronym>PHP</acronym>.
            </para>
        </note>
    </sect3>

    <sect3 id="zend.validate.set.notempty.types">
        <title>Changer le comportement de Zend_Validate_NotEmpty</title>

        <para>
            Certains projets ont des opinions différentes sur ce qui peut être considéré comme 'vide'.
            Une chaine seulement composée d'espaces blancs pourrait être considérée comme vide, ou
            <emphasis>0</emphasis> pourrait être considéré comme non-vide (surtout dans les séquences
            logiques booléennes). Pour correspondre aux différents besoins,
            <classname>Zend_Validate_NotEmpty</classname> vous permet de configurer les types que vous
            considérez comme vides.
        </para>

        <para>
            Les types suivants sont gérés&#160;:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    <emphasis>boolean</emphasis>&#160;: retourne <constant>FALSE</constant> lorsque
                    la valeur booléenne est <constant>FALSE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>integer</emphasis>&#160;: retourne <constant>FALSE</constant> lorsque l'entier
                    <emphasis>0</emphasis> est passé. Par défaut cette validation n'est pas activée et
                    retourne <constant>TRUE</constant> pour toute valeur d'entier.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>float</emphasis>&#160;: retourne <constant>FALSE</constant> lorsque le flottant
                    <emphasis>0.0</emphasis> est passé. Par défaut cette validation n'est pas activée et
                    retourne <constant>TRUE</constant> pour toute valeur de flottant.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>string</emphasis>&#160;: retourne <constant>FALSE</constant> lorsque la chaine vide
                    <emphasis>''</emphasis> est passée.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>zero</emphasis>&#160;: retourne <constant>FALSE</constant> lorsque le seul caractère
                    zéro (<emphasis>'0'</emphasis>) est passé.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>empty_array</emphasis>&#160;: retourne <constant>FALSE</constant> lorsqu'un tableau vide
                    <emphasis>array()</emphasis> est passé.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>null</emphasis>&#160;: retourne <constant>FALSE</constant> lorsqu'une valeur
                    <constant>NULL</constant> est passée.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>php</emphasis>&#160;: retourne <constant>FALSE</constant> lorsque la fonction
                    <acronym>PHP</acronym> <methodname>empty()</methodname> retournerait
                    <constant>TRUE</constant>.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>space</emphasis>&#160;: retourne <constant>FALSE</constant> lorsqu'une chaine
                    ne contenant que des caractères espace est passée.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>object</emphasis>&#160;: retourne <constant>TRUE</constant>.
                    <constant>FALSE</constant> sera retournée quand <property>object</property>
                    n'est pas autorisé mais qu'ue objet est fourni.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>object_string</emphasis>&#160;: retourne <constant>FALSE</constant>
                    quand un objet est fourni et que sa méthode
                    <methodname>__toString()</methodname> retourne une chaîne vide.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>object_count</emphasis>&#160;: retourne <constant>FALSE</constant>
                    quand un objet est fourni, qu'il implémente <classname>Countable</classname>
                    et que son compte vaut 0.
                </para>
            </listitem>

            <listitem>
                <para>
                    <emphasis>all</emphasis>&#160;: retourne <constant>FALSE</constant> pour tous les
                    types gérés cités ci-dessus.
                </para>
            </listitem>
        </itemizedlist>

        <para>
            Toute autre valeur passée retourne <constant>TRUE</constant> par défaut.
        </para>

        <para>
            Il existe différentes manières de selectionner les types ci-dessus. Vous pouvez en spécifier
            un ou plusieurs, sous forme de tableau ou de constantes ou encore de chaines.
            Voyez les exemples ci-après&#160;:
        </para>

        <programlisting language="php"><![CDATA[
// Retourne false pour 0
$validator = new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::INTEGER);

// Retourne false pour 0 ou '0'
$validator = new Zend_Validate_NotEmpty(
    Zend_Validate_NotEmpty::INTEGER + Zend_NotEmpty::ZERO
);

// Retourne false pour 0 ou '0'
$validator = new Zend_Validate_NotEmpty(array(
    Zend_Validate_NotEmpty::INTEGER,
    Zend_Validate_NotEmpty::ZERO
));

// Retourne false pour 0 ou '0'
$validator = new Zend_Validate_NotEmpty(array(
    'integer',
    'zero',
));
]]></programlisting>

        <para>
            Il est aussi possible de passer un objet <classname>Zend_Config</classname> afin de
            préciser les types à utiliser. Après instantiation, <methodname>setType()</methodname>
            peut être utilisée.
        </para>
    </sect3>
</sect2>