Describe the process of using Slim Framework with a NoSQL database.

Describe the process of using Slim Framework with a NoSQL database.

Using Slim Framework with a NoSQL database (such as MongoDB or Couchbase) involves connecting to the database, performing CRUD (Create, Read, Update, Delete) operations, and handling data in your Slim routes. Here’s how you can set this up in minimal steps.

1. Install the NoSQL Database Client

For MongoDB, you need the MongoDB PHP driver and MongoDB library.

Install MongoDB PHP driver:

Example

composer require mongodb/mongodb

2. Connect to the NoSQL Database

Set up the connection to MongoDB in your Slim app. You typically create a service or middleware to handle this.

Example: MongoDB Connection

Example

<?php
use MongoDB\Client;

$container['db'] = function () {
    return (new Client('mongodb://localhost:27017'))->selectDatabase('your_database');
};
?>

3. CRUD Operations in Routes

Now, you can use MongoDB’s collections to perform CRUD operations within your Slim routes.

Example: Create (Insert) Data

Example

<?php
$app->post('/add-item', function ($request, $response) {
    $body = $request->getParsedBody();
    $collection = $this->db->selectCollection('items');
    $result = $collection->insertOne(['name' => $body['name'], 'price' => $body['price']]);

    return $response->withJson(['insertedId' => (string) $result->getInsertedId()]);
});
?>

Example: Read (Find) Data

Example

<?php
$app->get('/items', function ($request, $response) {
    $collection = $this->db->selectCollection('items');
    $items = $collection->find()->toArray(); // Find all documents

    return $response->withJson($items);
});
?>

Example: Update Data

Example

<?php
$app->put('/update-item/{id}', function ($request, $response, $args) {
    $body = $request->getParsedBody();
    $collection = $this->db->selectCollection('items');
    $updateResult = $collection->updateOne(
        ['_id' => new MongoDB\BSON\ObjectId($args['id'])],
        ['$set' => ['name' => $body['name'], 'price' => $body['price']]]
    );

    return $response->withJson(['modifiedCount' => $updateResult->getModifiedCount()]);
});
?>

Example: Delete Data

Example

<?php
$app->delete('/delete-item/{id}', function ($request, $response, $args) {
    $collection = $this->db->selectCollection('items');
    $deleteResult = $collection->deleteOne(['_id' => new MongoDB\BSON\ObjectId($args['id'])]);

    return $response->withJson(['deletedCount' => $deleteResult->getDeletedCount()]);
});
?>

4. Handling Errors

Use Slim’s error middleware to handle any errors related to database operations, such as connection issues or query failures.

5. Securely Store Database Credentials

To avoid hardcoding sensitive information like database URIs, store credentials in environment variables (using PHP dotenv).

Install PHP dotenv:

Example

composer require vlucas/phpdotenv

Example: Load Environment Variables

Create a .env file:

Example

MONGO_URI=mongodb://localhost:27017
MONGO_DB=your_database

Load environment variables in index.php:

Example

<?php
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

$container['db'] = function () {
    $uri = getenv('MONGO_URI');
    $db = getenv('MONGO_DB');
    return (new MongoDB\Client($uri))->selectDatabase($db);
};
?>

6. Test the NoSQL CRUD Operations

You can now test the CRUD operations by hitting the relevant routes (/add-item, /items, /update-item/{id}, /delete-item/{id}) via Postman or another HTTP client.

Related Questions & Topics