Fermer

août 4, 2022

Comment intégrer MongoDB à Drupal


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