Slim Framework: Difference between revisions
Jump to navigation
Jump to search
| (3 intermediate revisions by the same user not shown) | |||
| Line 26: | Line 26: | ||
mkdir src | mkdir src | ||
mkdir templates | mkdir templates | ||
mkdir tests | |||
=== <code>.gitignore</code> === | === <code>.gitignore</code> === | ||
| Line 82: | Line 83: | ||
use DI\ContainerBuilder; | use DI\ContainerBuilder; | ||
use Slim\Factory\AppFactory; | use Slim\Factory\AppFactory; | ||
use Slim\Views\Twig; | |||
use Slim\Views\TwigMiddleware; | |||
require_once __DIR__ . '/../vendor/autoload.php'; | require_once __DIR__ . '/../vendor/autoload.php'; | ||
| Line 114: | Line 117: | ||
composer create-project slim/slim-skeleton my-app | composer create-project slim/slim-skeleton my-app | ||
== Adopting in a legacy project == | |||
How to add Slim to an existing project which doesn't use a framework. Slim is probably the only actively maintained framework where this is possible, as Laravel and Symfony both expect you to use them exclusively. | |||
== Links == | == Links == | ||
Latest revision as of 07:27, 5 May 2022
Requirements
Slim 4 requires PHP 7.2 or greater. The current Ubuntu LTS and Debian stable include 7.4, so this requirement is satisfied on up to date servers.
Installation
Core
composer require slim/slim:"4.*" composer require slim/psr7
Additional libraries
composer require filp/whoops composer require twig/twig composer require twig/intl-extra composer require slim/twig-view composer require doctrine/orm composer require vlucas/phpdotenv composer require php-di/php-di --with-all-dependencies composer require phpunit/phpunit --dev
Directories
mkdir public mkdir src mkdir templates mkdir tests
.gitignore
vendor/
composer.json autoloader
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"App\\Test\\": "tests/"
}
}
Run composer dump-autoload to generate the autoloader.
.env file
APP_DEFAULT_TIMEZONE="Europe/London"
templates/base.twig.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ block('title') }}</title>
<link rel="stylesheet" href="/css/pure-min.css">
</head>
<body>
{{ block('content') }}
</body>
</html>
templates/index.twig.html
{% extends 'base.twig.html' %}
{% block content %}
<p>Hello {{ name }}</p>
{% endblock %}
public/index.php
<?php
declare(strict_types = 1);
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use DI\ContainerBuilder;
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
require_once __DIR__ . '/../vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
date_default_timezone_set($_ENV['APP_DEFAULT_TIMEZONE']);
$containerBuilder = new Container();
AppFactory::setContainer($container);
$app = AppFactory::create();
$app->addRoutingMiddleware();
$app->addBodyParsingMiddleware();
$app->addErrorMiddleware(true, true, true);
$app->get('/hello/[{name}]', function(
ServerRequestInterface $request,
ResponseInterface $response,
array $args
): ResponseInterface {
$name = $args['name'] ?? 'unknown';
$response->getBody()->write("hello $name");
return $response;
});
$app->run();
Slim Skeleton
composer create-project slim/slim-skeleton my-app
Adopting in a legacy project
How to add Slim to an existing project which doesn't use a framework. Slim is probably the only actively maintained framework where this is possible, as Laravel and Symfony both expect you to use them exclusively.