web-dev-qa-db-fra.com

Vérifier les doublons dans un champ de formulaire avant de l'enregistrer

J'ai un composant personnalisé où l'utilisateur peut ajouter des données. Voici les deux champs pertinents:

<field 
    name="title" 
    type="text" 
    label="Title" 
    description="Please enter a title" 
    required="true" 
/>
<field 
    name="alias" 
    type="text" 
    label="Alias" 
    description="Please enter an unique alias" 
    required="true" 
/>

J'utilise actuellement la méthode standard "enregistrer" pour enregistrer les données du formulaire. Mais le problème évident est qu’il enregistre les alias en double. Où et comment vais-je ajouter un chèque pour m'assurer que le pseudonyme n'est pas utilisé (comme avec Menu Item ou Article).

2
sifu

Le meilleur endroit est votre classe de table avant de stocker des données. Par exemple, ci-dessous la fonction code in store de la classe table.

public function store ($updateNulls = false)
{
    if ($table->load(array('alias' => $this->alias, 'catid' => $this->catid)) && ($table->id != $this->id || $this->id == 0))
    {
        $this->setError(JText::_('COM_MYCOMPONENT_DATABASE_ERROR_UNIQUE_ALIAS').'| Alias: '.$this->alias);
        return false;
    }

    return parent::store($updateNulls);
}
3
Nagarjun

J'ai suivi la réponse et proposé ce qui suit:

  public function save($data){
        $table = $this->getTable();
        $table->load(array('alias' => $data['alias']));

        if (($table->alias == $data['alias']) && $table->id != $data['id'])
        {
            $this->setError(JText::_('COM_MYCOMPONENT_ALIAS_ALREADY_EXISTS').'| Alias: ' . $data['alias']);
            return false;
        }
        $save = parent::save($data);
    }
1
sifu