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).
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);
}
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);
}