Getting Started with Slim Framework

Installation

To begin using Slim, you need to install it via Composer. If you don't have Composer installed, you can download it from getcomposer.org.

Run the following command to create a new Slim project:

composer create-project slim/slim-skeleton [your-project-name]

Change to your project directory:

cd [your-project-name]

Directory Structure

The basic directory structure of a Slim application looks like this:

/[project-name]
|-- /public
|   |-- index.php
|-- /src
|   |-- Dependencies.php
|   |-- Middleware
|   |-- Routes
|-- composer.json

Configuring Your Application

Open the index.php file in the public directory. This is the entry point of your application. Here, you can set up your application, including error handling and middleware.

<?php
require '../vendor/autoload.php';

$app = new \Slim\App;

// Error handling
$app->get('/error', function ($request, $response) {
    throw new Exception("An error occurred");
});

// Middleware
$app->add(function ($request, $response, $next) {
    // Log request details
    return $next($request, $response);
});

$app->run();

Defining Routes

Routing is one of the core features of Slim. You can define routes using HTTP methods like GET, POST, PUT, and DELETE. Here’s how to set up basic routes:

$app->get('/hello/{name}', function ($request, $response, $args) {
    $name = $args['name'];
    return $response->getBody()->write("Hello, $name");
});

$app->post('/user', function ($request, $response) {
    $data = $request->getParsedBody();
    // Process the data
    return $response->withStatus(201)->write("User created");
});

Middleware

Middleware in Slim allows you to execute code before or after a request is processed. This is useful for tasks like authentication, logging, and modifying requests or responses.

Here’s an example of a simple authentication middleware:

$app->add(function ($request, $response, $next) {
    $authHeader = $request->getHeaderLine('Authorization');
    if (!$authHeader || $authHeader !== 'Bearer your_token') {
        return $response->withStatus(401)->write('Unauthorized');
    }
    return $next($request, $response);
});

Dependency Injection

Slim supports dependency injection, which allows you to manage your application's dependencies more efficiently. You can define dependencies in a separate file and access them throughout your application.

Create a Dependencies.php file in the src directory:

<?php
use Psr\Container\ContainerInterface;

$container = $app->getContainer();

$container['db'] = function (ContainerInterface $container) {
    return new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
};

You can then use the database connection in your routes:

$app->get('/users', function ($request, $response) {
    $db = $this->db;
    $stmt = $db->query("SELECT * FROM users");
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
    return $response->withJson($users);
});

Error Handling

Slim provides a simple way to handle errors. You can set up a custom error handler to return JSON responses for API requests:

$app->setErrorHandler(function ($request, $response, $exception) {
    $data = [
        'error' => [
            'message' => $exception->getMessage(),
            'code' => $exception->getCode(),
        ],
    ];
    return $response->withJson($data, 500);
});

Summary of Key Features

FeatureDescription
RoutingDefine routes using HTTP methods for handling requests.
MiddlewareExecute code before/after requests for tasks like logging or authentication.
Dependency InjectionManage dependencies efficiently throughout the application.
Error HandlingCustomize error responses for better API usability.

Conclusion

The Slim Framework is a powerful tool for building PHP applications and APIs. Its lightweight nature, combined with features like routing, middleware, and dependency injection, makes it an excellent choice for developers looking to create efficient and scalable applications. By following the examples in this tutorial, you can quickly set up a Slim application and start building your own projects.


Learn more with useful resources