web-dev-qa-db-fra.com

Comment définir des données d'entrée personnalisées dans le modèle

J'utilise JTable pour CRUD sur mon application. J'ai créé une méthode dans un modèle pour enregistrer des données dans une base de données

J'ai besoin d'ajouter des entrées personnalisées "créé" et "created_by" comme indiqué dans la variable "$ custom_data" et de l'enregistrer dans la base de données. Veuillez noter que $ form_data est enregistré avec succès.

public function create() {
        $table = $this->getTable();
        $jinput = JFactory::getApplication()->input->post;
        $form_data = $jinput->get('jform', array(), 'array');
        $custom_data = array(
            'created'       => JFactory::getDate()->toSql(),
            'created_by'    => JFactory::getUser()->id
        );

        if (!$table->save($form_data)) {
            JError::raiseNotice(500, $table->getError());
            return FALSE;
        }

        return $form_data;
    }
1
Sahil Purav

Vous avez demandé une autre méthode, la voici :-)

Le meilleur endroit pour de telles opérations IMHO est la méthode de liaison de la classe JTable. Vous trouverez ci-dessous un exemple de substitution de cette méthode dans votre classe JTable.

public function bind($src, $ignore = array())
{
    // Call parent's bind method
    if (parent::bind($src, $ignore))
    {
        // Do the following only when it's a new item ($this->id is 0 then)
        if (!$this->id)
        {
            $this->created = JFactory::getDate()->toSql();
            $this->created_by = JFactory::getUser()->id;
        }
    }
    return true;
}

Vous n'avez plus besoin de ces lignes alors:

$custom_data = array(
    'created' => JFactory::getDate()->toSql(),
    'created_by' => JFactory::getUser()->id
);
$data += $custom_data;

Vous appelez $ table-> save () dans votre modèle et cette méthode appellera automatiquement la méthode bind () pour vous.

2
fruppel

J'ai pu résoudre ce problème avec:

viens d'ajouter $ data = $ form_data + $ custom_data; Toute autre méthode recommandée est appréciable.

public function create() {
        $table = $this->getTable();
        $jinput = JFactory::getApplication()->input->post;
        $data = $jinput->get('jform', array(), 'array');
        $custom_data = array(
            'created' => JFactory::getDate()->toSql(),
            'created_by' => JFactory::getUser()->id
        );
        $data += $custom_data;
        try {
            $table->save($data);
        } catch (Exception $ex) {
            if ($ex->getCode() == '404') {
                throw new Exception($e->getMessage(), 404);
            } else {
                JFactory::getApplication()->enqueueMessage(JText::_('COM_HELPDESK_ERROR_OCCURRED'), 'error');
            }
        }

        $id = array(
            'id' => $table->id
        );

        $data += $id;

        return $data;
    }
1
Sahil Purav