Slim
Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs.
Top Related Projects
Laravel is a web application framework with expressive, elegant syntax. We’ve already laid the foundation for your next big idea — freeing you to create without sweating the small things.
The Symfony PHP framework
Fast, unopinionated, minimalist web framework for node.
CakePHP: The Rapid Development Framework for PHP - Official Repository
Open Source PHP Framework (originally from EllisLab)
Quick Overview
Slim is a lightweight PHP micro-framework that helps you quickly write simple yet powerful web applications and APIs. It provides a robust set of tools for routing, middleware, and HTTP request/response handling, while maintaining a minimalist approach that allows developers to add only the features they need.
Pros
- Lightweight and fast, with minimal overhead
- Highly flexible and customizable
- Easy to learn and use, especially for developers familiar with PHP
- Excellent documentation and active community support
Cons
- Limited built-in features compared to full-stack frameworks
- May require additional libraries for complex applications
- Not ideal for large-scale, enterprise-level projects
- Steeper learning curve for beginners compared to some other micro-frameworks
Code Examples
- Basic route handling:
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
$app = AppFactory::create();
$app->get('/hello/{name}', function (Request $request, Response $response, array $args) {
$name = $args['name'];
$response->getBody()->write("Hello, $name");
return $response;
});
$app->run();
- Middleware example:
<?php
$app->add(function ($request, $handler) {
$response = $handler->handle($request);
return $response->withHeader('X-Powered-By', 'Slim Framework');
});
- JSON response:
<?php
$app->get('/api/users', function (Request $request, Response $response) {
$users = ['John', 'Jane', 'Bob'];
$payload = json_encode($users);
$response->getBody()->write($payload);
return $response->withHeader('Content-Type', 'application/json');
});
Getting Started
- Install Slim using Composer:
composer require slim/slim:"4.*"
- Create an
index.php
file with the following content:
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
require __DIR__ . '/vendor/autoload.php';
$app = AppFactory::create();
$app->get('/', function (Request $request, Response $response) {
$response->getBody()->write('Hello, World!');
return $response;
});
$app->run();
- Run your application using PHP's built-in server:
php -S localhost:8000
- Visit
http://localhost:8000
in your browser to see the "Hello, World!" message.
Competitor Comparisons
Laravel is a web application framework with expressive, elegant syntax. We’ve already laid the foundation for your next big idea — freeing you to create without sweating the small things.
Pros of Laravel
- Full-featured framework with built-in tools for authentication, routing, ORM, and more
- Extensive documentation and large community support
- Elegant syntax and developer-friendly features like Eloquent ORM
Cons of Laravel
- Heavier footprint and potentially slower performance for simple applications
- Steeper learning curve for beginners due to its comprehensive nature
- More opinionated structure, which may limit flexibility in some cases
Code Comparison
Laravel (routing example):
Route::get('/user/{id}', function ($id) {
return 'User '.$id;
});
Slim (routing example):
$app->get('/user/{id}', function ($request, $response, $args) {
return $response->write("User " . $args['id']);
});
Summary
Laravel is a full-featured PHP framework offering a wide range of built-in tools and extensive community support. It's ideal for large, complex applications but may be overkill for simpler projects. Slim, on the other hand, is a lightweight micro-framework that provides more flexibility and potentially better performance for smaller applications. It has a gentler learning curve but requires more manual setup for advanced features. The choice between the two depends on the project's complexity, performance requirements, and developer preferences.
The Symfony PHP framework
Pros of Symfony
- More comprehensive framework with a wide range of built-in features and components
- Robust dependency injection container and service management
- Extensive documentation and large community support
Cons of Symfony
- Steeper learning curve due to its complexity and size
- Potentially slower performance for simple applications due to overhead
- Requires more configuration and setup compared to lightweight frameworks
Code Comparison
Symfony route definition:
/**
* @Route("/hello/{name}", name="hello")
*/
public function hello($name)
{
return new Response("Hello, " . $name);
}
Slim route definition:
$app->get('/hello/{name}', function ($request, $response, $args) {
$name = $args['name'];
return $response->write("Hello, " . $name);
});
Both frameworks offer routing capabilities, but Symfony uses annotations and controller classes, while Slim uses a more straightforward closure-based approach. Symfony's method is more structured and suitable for larger applications, while Slim's approach is simpler and quicker to implement for smaller projects.
Fast, unopinionated, minimalist web framework for node.
Pros of Express
- Larger ecosystem and community, with more middleware and plugins available
- More flexible routing system, supporting complex patterns and parameters
- Better performance for high-traffic applications due to its lightweight nature
Cons of Express
- Steeper learning curve for beginners compared to Slim's simplicity
- Requires more configuration and setup for basic functionality
- Less opinionated, which can lead to inconsistent code structure across projects
Code Comparison
Express:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
Slim:
<?php
use Slim\Factory\AppFactory;
$app = AppFactory::create();
$app->get('/', function ($request, $response, $args) {
return $response->write('Hello World!');
});
Both frameworks offer simple routing and request handling, but Express uses JavaScript's callback style, while Slim uses PHP's closure approach. Express provides a more concise syntax for basic routes, while Slim requires slightly more setup code.
Express is generally more popular for Node.js developers, offering greater flexibility and a vast ecosystem. Slim, on the other hand, is favored by PHP developers for its simplicity and ease of use in smaller projects. The choice between the two often depends on the developer's preferred language and the project's specific requirements.
CakePHP: The Rapid Development Framework for PHP - Official Repository
Pros of CakePHP
- Full-featured MVC framework with built-in ORM, authentication, and caching
- Extensive documentation and large community support
- Follows convention over configuration, reducing development time
Cons of CakePHP
- Steeper learning curve due to its comprehensive nature
- Heavier and potentially slower for simple applications
- More opinionated, which may limit flexibility in some cases
Code Comparison
CakePHP (Controller):
class ArticlesController extends AppController
{
public function index()
{
$articles = $this->Articles->find('all');
$this->set(compact('articles'));
}
}
Slim (Route):
$app->get('/articles', function (Request $request, Response $response) {
$articles = // Fetch articles
return $response->withJson($articles);
});
CakePHP provides a more structured approach with built-in ORM and view handling, while Slim offers a lightweight and flexible routing system. CakePHP is better suited for large, complex applications, whereas Slim excels in building small to medium-sized APIs and microservices.
Open Source PHP Framework (originally from EllisLab)
Pros of CodeIgniter4
- Full-featured framework with built-in tools for database management, form validation, and security
- Extensive documentation and large community support
- Built-in CLI tool for easier development and project management
Cons of CodeIgniter4
- Heavier and more complex than Slim, which may be overkill for simple projects
- Steeper learning curve for beginners compared to Slim's minimalist approach
- Less flexibility in choosing components and libraries due to its opinionated structure
Code Comparison
CodeIgniter4:
$routes->get('/', 'Home::index');
$routes->post('users', 'UserController::create');
$routes->get('users/(:num)', 'UserController::show/$1');
Slim:
$app->get('/', HomeController::class . ':index');
$app->post('/users', UserController::class . ':create');
$app->get('/users/{id}', UserController::class . ':show');
Both frameworks use similar routing syntax, but CodeIgniter4 uses a more traditional controller method naming convention, while Slim allows for more flexibility in method naming and class structure. CodeIgniter4's routing also supports automatic parameter passing, whereas Slim requires explicit parameter definition in the route.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Slim Framework
Slim is a PHP micro-framework that helps you quickly write simple yet powerful web applications and APIs.
Installation
It's recommended that you use Composer to install Slim.
$ composer require slim/slim
This will install Slim and all required dependencies. Slim requires PHP 7.4 or newer.
Choose a PSR-7 Implementation & ServerRequest Creator
Before you can get up and running with Slim you will need to choose a PSR-7 implementation that best fits your application. A few notable ones:
- Slim-Psr7 - This is the Slim Framework PSR-7 implementation
- httpsoft/http-message & httpsoft/http-server-request - This is the fastest, strictest and most lightweight implementation available
- Nyholm/psr7 & Nyholm/psr7-server - Performance is almost the same as the HttpSoft implementation
- Guzzle/psr7 - This is the implementation used by the Guzzle Client, featuring extra functionality for stream and file handling
- laminas-diactoros - This is the Laminas (Zend) PSR-7 implementation
Slim-Http Decorators
Slim-Http is a set of decorators for any PSR-7 implementation that we recommend is used with Slim Framework. To install the Slim-Http library simply run the following command:
composer require slim/http
The ServerRequest
and Response
object decorators are automatically detected and applied by the internal factories. If you have installed Slim-Http and wish to turn off automatic object decoration then you can use the following statements:
<?php
use Slim\Factory\AppFactory;
use Slim\Factory\ServerRequestCreatorFactory;
AppFactory::setSlimHttpDecoratorsAutomaticDetection(false);
ServerRequestCreatorFactory::setSlimHttpDecoratorsAutomaticDetection(false);
$app = AppFactory::create();
// ...
Hello World using AppFactory with PSR-7 auto-detection
In order for auto-detection to work and enable you to use AppFactory::create()
and App::run()
without having to manually create a ServerRequest
you need to install one of the following implementations:
- Slim-Psr7 - Install using
composer require slim/psr7
- httpsoft/http-message & httpsoft/http-server-request - Install using:
composer require httpsoft/http-message httpsoft/http-server-request
- Nyholm/psr7 & Nyholm/psr7-server - Install using
composer require nyholm/psr7 nyholm/psr7-server
- Guzzle/psr7 - Install using
composer require guzzlehttp/psr7
- laminas-diactoros - Install using
composer require laminas/laminas-diactoros
Then create file public/index.php.
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
require __DIR__ . '/../vendor/autoload.php';
// Instantiate App
$app = AppFactory::create();
// Add error middleware
$app->addErrorMiddleware(true, true, true);
// Add routes
$app->get('/', function (Request $request, Response $response) {
$response->getBody()->write('<a href="/hello/world">Try /hello/world</a>');
return $response;
});
$app->get('/hello/{name}', function (Request $request, Response $response, $args) {
$name = $args['name'];
$response->getBody()->write("Hello, $name");
return $response;
});
$app->run();
You may quickly test this using the built-in PHP server:
$ php -S localhost:8000 -t public
Going to http://localhost:8000/hello/world will now display "Hello, world".
For more information on how to configure your web server, see the Documentation.
Tests
To execute the test suite, you'll need to install all development dependencies.
$ git clone https://github.com/slimphp/Slim
$ composer install
$ composer test
Contributing
Please see CONTRIBUTING for details.
Learn More
Learn more at these links:
Security
If you discover security related issues, please email security@slimframework.com instead of using the issue tracker.
For enterprise
Available as part of the Tidelift Subscription.
The maintainers of Slim
and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.
Contributors
Code Contributors
This project exists thanks to all the people who contribute. Contribute.
Financial Contributors
Become a financial contributor and help us sustain our community. Contribute
Individuals
Organizations
Support this project with your organization. Your logo will show up here with a link to your website. Contribute
License
The Slim Framework is licensed under the MIT license. See License File for more information.
Top Related Projects
Laravel is a web application framework with expressive, elegant syntax. We’ve already laid the foundation for your next big idea — freeing you to create without sweating the small things.
The Symfony PHP framework
Fast, unopinionated, minimalist web framework for node.
CakePHP: The Rapid Development Framework for PHP - Official Repository
Open Source PHP Framework (originally from EllisLab)
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot