Dans ce tutoriel, nous allons apprendre à intégrer MongoDB à Drupal.
Avant de continuer, nous devons connaître certaines des bases suivantes :
Qu’est-ce que MongoDB ?
MongoDB est un programme de base de données multiplateforme orienté document disponible en source. Classé comme programme de base de données NoSQL, MongoDB utilise des documents de type JSON avec des schémas facultatifs. MongoDB est développé par MongoDB Inc. et sous licence sous la licence publique côté serveur qui est considérée comme non libre par plusieurs distributions.
Installer MongoDB sur Linux ?
Ces documents fournissent des instructions pour installer MongoDB Community Edition.
Installer sous Linux
Installez MongoDB Community Edition et les dépendances requises sur Linux.
Installer sur MacOS
Installez MongoDB Community Edition sur les systèmes MacOS à partir des archives MongoDB.
Installer sur Windows
Installez MongoDB Community Edition sur les systèmes Windows et démarrez éventuellement MongoDB en tant que service Windows.
Installer le pilote PHP MongoDB
Veuillez utiliser les liens ci-dessous pour installer le pilote PHP MongoDB
Comment démarrer/arrêter/redémarrer/état du service MongoDB
sudo systemctl start mongod sudo systemctl status mongod sudo systemctl stop mongod sudo systemctl restart mongod
Installer le module MongoDB
https://www.drupal.org/project/mongodb
La MongoDB suite de modules pour Drupal 9/8 stocke les données dans MongoDB au lieu de la base de données Drupal SQL par défaut.
mongodb | Wrapper Drupal/Drush autour de mongodb-php-library.
mongodb_storage | Stockage clé-valeur dans MongoDB.
mongodb_watchdog | Stockez les messages de l’enregistreur (chien de garde) dans MongoDB.
Configurer Drupal pour utiliser le plugin MongoDB
Une fois le module installé, vous devez mettre la connexion MongoDB dans votre settings.php ou local.settings.php
$settings['mongodb'] = [ 'clients' => [ // Client alias => connection constructor parameters. 'default' => [ 'uri' => 'mongodb://localhost:27017', 'uriOptions' => [], 'driverOptions' => [], ], ], 'databases' => [ // Database alias => [ client_alias, database_name ] // 'default' => ['default', 'drupal'], 'keyvalue' => ['default', 'keyvalue'], // logger is needed when you are using mongodb watchdog module. 'logger' => ['default', 'drupalmongo'], ], ]; Now enable MongoDB Watchdog module and navigate to database log page. All the list you will see here is populated from MongoDB.
Formulaire simple pour enregistrer les valeurs d’entrée dans Mongo dans Drupal.
Je m’attends à ce que vous ayez créé le module personnalisé ttn_km et que la configuration de MongoDB soit terminée.
Dans votre fichier de classe de formulaire simple, le code ci-dessous peut être utilisé pour les opérations Mongo.
<?php namespace Drupal\ttn_km\Form; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\mongodb\MongoDb; use Drupal\Core\Url; use Drupal\Core\Link; /** * Class MongodbOperationsForm. */ class MongodbOperationsForm extends FormBase { /** * Drupal\mongodb\DatabaseFactory definition. * * @var \Drupal\mongodb\DatabaseFactory */ protected $mongodbDatabaseFactory; protected $messenger; protected $current_request; /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { $instance = parent::create($container); $instance->mongodbDatabaseFactory = $container->get('mongodb.database_factory'); $instance->messenger = $container->get('messenger'); $instance->current_request = $container->get('request_stack'); return $instance; } /** * {@inheritdoc} */ public function getFormId() { return 'mongodb_operations_form'; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $id = $this->current_request->getCurrentRequest()->get("id"); if (!empty($id)) { // $this->getRowsById($id); } $form['first_name'] = [ '#type' => 'textfield', '#title' => $this->t('First Name'), '#maxlength' => 64, '#size' => 64, '#weight' => '0', ]; $form['last_name'] = [ '#type' => 'textfield', '#title' => $this->t('Last Name'), '#maxlength' => 64, '#size' => 64, '#weight' => '0', ]; $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Save'), '#weight' => '0', ]; $form['rows'] = [ '#theme' => 'table', '#header' => ['id', 'frist name', 'last name', 'link'], '#rows' => $this->getRowsFromMongo(), '#empty' =>t('Your table is empty'), ]; $form['#cache'] = ['max-age' => 0]; return $form; } /** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { if (!empty($form_state->getValues()['first_name'])) { $database = $this->mongodbDatabaseFactory->get("logger"); $collection = $database->selectCollection('mongodb_operations_form'); $rows = $collection->find(['first_name' => $form_state->getValues()['first_name']]); if (count($rows->toArray())) { $form_state->setErrorByName("first_name", "Fname Already exists"); } } parent::validateForm($form, $form_state); } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { if (!empty($id)) { //@todo update record with ID match. } else { $database = $this->mongodbDatabaseFactory->get("logger"); $collection = $database->selectCollection('mongodb_operations_form'); $collection->insertOne([ "first_name" => $form_state->getValue("first_name"), "last_name" => $form_state->getValue("last_name"), ]); $this->messenger->addMessage("Mongo insertion done!!"); } } protected function getRowsById($id = "") { $database = $this->mongodbDatabaseFactory->get("logger"); $collection = $database->selectCollection('mongodb_operations_form'); $rows = $collection->findOne(["_id" => new \MongoDB\BSON\ObjectID($id)]); dump($rows->toArray()); die; } public function getRowsFromMongo() { $database = $this->mongodbDatabaseFactory->get("logger"); $collection = $database->selectCollection('mongodb_operations_form'); $rows = $collection->find(); $tableRows = []; foreach( $rows as $row) { $url = Url::fromRoute('ttn_km.mongodb_operations_form', array('id' => (string)$row->_id)); $project_link = Link::fromTextAndUrl(t('Edit'), $url); $tableRows[] = [ 'id' => (string)$row->_id, 'fname' => $row->first_name, 'lname' => $row->last_name, 'link' => $project_link->toString(), ]; } return $tableRows; } }
TROUVÉ CELA UTILE ? PARTAGEZ-LE
Source link