Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/pantaflex44/syme

Syme est un petit framework PHP aidant à la réalisation d'applications Web. Simple et rapide, ce framework a été conçu pour accélérer le développement tout en restant modulaire et efficace. Applications Web, API Rest, Syme est l'outil incontournable de vos projets.
https://github.com/pantaflex44/syme

framework php route syme

Last synced: about 4 hours ago
JSON representation

Syme est un petit framework PHP aidant à la réalisation d'applications Web. Simple et rapide, ce framework a été conçu pour accélérer le développement tout en restant modulaire et efficace. Applications Web, API Rest, Syme est l'outil incontournable de vos projets.

Awesome Lists containing this project

README

        

# Syme

*L'autre micro-framework PHP.*

**Syme** est un petit framework PHP aidant à la réalisation d'applications Web. Simple et rapide, ce framework a été conçu pour accélérer le développement tout en restant modulaire et efficace. Applications Web, API Rest, Syme est l'outil incontournable de vos projets.

## Installation

### Automatique

```bash
$ composer create-project pantaflex44/syme
```

### Manuelle

**Téléchargement du projet**
```bash
$ git clone https://github.com/pantaflex44/Syme.git syme
$ cd syme
```

**Installation des dépendances**:
```bash
$ composer install
```

**Edition des configurations**:
```bash
$ sudo nano config.php
```

## Exemple d'utilisation

```php
write("Bonjour le monde");

return $response;
});

Route::get('article', '/article/{id:[0-9]+}/author/{name}', function (int $id, string $name, Response $response, Data $data): Response {
$obj = ['article id' => $id, 'author name' => $name];
$obj = array_merge($obj, $data->all());

$response
->writeObject($obj)
->withStatus(200);

return $response;
});
Route::before('article', function(Request $request, Response $response, Data $data): void {
$data->set('who am i ?', "I'm a midlleware ;-)");
});
```

# Documentation (v1)

## Complète

*(en cours...)*
https://pantaflex44.gitbook.io/documentation-de-syme/

## Rapide

### Les composants du Framework (/components/core)

- **Route** : Représente le moteur de routage

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/Route.php

*Schéma*:

- ```::extendWith(string $class): void``` : Ajoute un composant au système de routage pour le rendre accessible dans chaque routes, middlewares, ou autres composants
- ```::isAsset(Request $request): string|false``` : Indique si l'url correspond à un fichier à télécharger (fichier dans le dossier '/public')
- ```::sendAsset(string $filepath): void``` : Envoie au visiteur le fichier correspondant à l'url (fichier dans le dossier '/public')
- ```::exists(string $routeName): bool``` : Indique si une route existe par son nom
- ```::match(string $routeName): array|false``` : Retourne les informations d'une route par son nom
- ```::isLinked(string $uri, array $methods = ['GET', 'POST', 'OPTIONS', 'PUT', 'PATCH', 'DELETE']): bool``` : Indique si une route est bien attachée à un chemin et à une ou plusieurs méthodes HTTP
- ```::getUri(string $routeName, array $params = []): string|false``` : Retourne le chemin associé à une route et spécifiant les attributs
- ```::getPath(string $routeName, array $params = []): string|false``` : Retourne le chemin complet associé à une route et spécifiant les attributs
- ```::getUrl(string $routeName, array $params = []): string|false``` : Retourne l'url complète associée à une route et spécifiant les attributs
- ```::toRequest(string $routeName, array $params = []): Request|false``` : Transforme une route par son nom, en requète HTTP
- ```::redirect(string $routeName, array $params = [], int $status = 302): false``` : Redirige le visiteur vers une route en fonction de son nom
- ```::apply(Request $request): array``` : Applique la logique d'une route en fonction d'une requète passée en paramètres. Renvoie la requète modifiée et la réponse à envoyer
- ```::sendResponse(Request $initialRequest, null|Response $response): void``` : Envoie le contenu d'une réponse en fonction de la requète HTTP
- ```::any(string $name, string $uri, callable $callback): void``` : Enregistre une route pour toutes les méthodes HTTP
- ```::map(array $methods, string $name, string $uri, callable $callback): void``` : Enregistre une route pour les méthodes HTTP spécifiées
- ```::get(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP GET
- ```::post(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP POST
- ```::put(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP PUT
- ```::patch(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP PATCH
- ```::delete(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP DELETE
- ```::before(?string $routeName, callable|string $middleware): void``` : Enregistre un middleware devant s'exécuter avant la logique d'une route
- ```::after(?string $routeName, callable|string $middleware): void``` : Enregistre un middleware devant s'exécuter après la logique d'une route

- **Request** : Représente la requète HTTP courante

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/Request.php

*Schéma*:

- ```__construct(string $url = null)``` : Constructeur
- ```::current(): Request``` : Retourne la requète courante
- ```getPath(): string``` : Retourne le chemin de l'url
- ```getUri(): string``` : Retourne la portion d'url correspondante au chemin
- ```getQueryString(): array``` : Retourne la liste des attributs de l'url
- ```getFragment(): string``` : Retourne le fragment de l'url
- ```getScheme(): string``` : Retourne le schéma HTTP
- ```getHost(): string``` : Retourne l'hôte
- ```getPort(): int``` : Retourne le port utilisé par l'hôte
- ```getDomain(): string``` : Retourne le domaine complet
- ```getMethod(): string``` : Retourne la méthode HTTP
- ```getAcceptedLanguage(): array``` : Retourne la liste des languages acceptés
- ```getAcceptedEncoding(): array``` : Retourne la liste des encodages acceptés
- ```getAcceptedTypes(): array``` : Retourne la liste des types de données acceptés
- ```getUserAgent(): string``` : Retourne l'agent HTTP
- ```getRemoteAddress(): string``` : Retourne l'adresse IP du visiteur
- ```getRemotePort(): int``` : Retourne le numéro du port utilisé par le visiteur
- ```getUrl(bool $full = false): string``` : Retourne l'url correspondante
- ```hasArgument(string $name): bool``` : Indique si l'url contient des attributs
- ```getArgument(string $name): false|string``` : Retourne un attribut par son nom
- ```isXHRRequest(): bool``` : Indique si c'est une requète AJAX
- ```hasHeader(string $header): bool``` : Indique si une entète HTTP existe
- ```getHeaders(): array``` : Retourne la liste des entètes HTTP
- ```getHeader(string $header): false|string``` : Retourne une entète HTTP par son nom
- ```getAuthorization(): string``` : Retourne le jeton d'authorisation
- ```getContent(): mixed``` : Retourne le contenu de la requète
- ```getContentType(): string``` : Retourne le type du contenu de la requète
- ```getForm(): null|object``` : Retourne le contenu d'un formulaire HTML
- ```hasForm(): bool``` : Indique si la requète contient un formlaire HTML
- ```getFiles(): UploadedFiles``` : Retourne la liste des fichiers téléversés
- ```getReferer(): bool|string``` : Retourne l'url de la page précédente

- **Response** : Représente la réponse HTTP à renvoyer au visiteur

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/Response.php

*Schéma*:

- ```__construct(string $body = '', string $contentType = 'text/html')``` : Constructeur
- ```hasHeader(string $header): bool``` : Indique si une entète HTTP a été ajoutée
- ```removeHeader(string $headerKey): bool``` : Supprime une entète HTTP
- ```getHeaders(): array``` : Retourne la liste des entètes HTTP
- ```getHeader(string $header): false|string``` : Retourne une entète HTTP
- ```withHeader(string $header): Response``` : Ajoute une entète HTTP
- ```withBearerAuthorization(string $bearer): Response``` : Ajoute un un jeton d'authorization
- ```withHeaders(array $headers): Response``` : Ajoute une liste d'entètes HTTP
- ```getStatus(): int``` : Retourne le status HTTP courant
- ```withStatus(int $status): Response``` : Modifie le status de la réponse HTTP
- ```getContent(): string``` : Retourne le contenu brut de la réponse HTTP
- ```getGzipContent(): string``` : Retourne le contenu compressé de la réponse HTTP
- ```getContentType(): string``` : Retourne le type mime du contenu de la réponse
- ```getParsed(): array``` : Retourne le contenu décomposé de la réponse HTTP. (XML, Json, multipart, form, data)
- ```getJson(bool $associative = true): mixed``` : Retourne le contenu au format Json
- ```clear(): Response``` : Supprime le contenu de la réponse
- ```write(string $content, string $contentType = 'text/html'): Response``` : Modifie le contenu de la réponse HTTP
- ```prepend(string $content): Response``` : Ajoute du contenu avant la réponse HTTP
- ```append(string $content): Response``` : Ajoute du contenu après la réponse HTTP
- ```writeObject(mixed $object): Response``` : Tranforme un objet PHP en contenu Json puis l'écrit dans la réponse HTTP
- ```writeJson(string $json): Response``` : Ecrit du contenu Json dans la réponse HTTP

- **Data** : Représente le conteneur de données personnelles capable de traverser l'ensemble des logiques (Routes, Middleswares, Composants)

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/Data.php

*Schéma*:

- ```__construct()``` : Constructeur.
- ```count(): int``` : Retourne le nombre de données enregistrées
- ```clear(): void``` : Supprime toutes les données
- ```all(): array``` : Retourne toutes les données enregistrées
- ```exists(string $key): bool``` : Indique si une donnée existe par le nom de sa clef
- ```get(string $key): mixed``` : Retourne la valeur d'une donnée en fonction du nom de sa clef
- ```set(string $key, mixed $value): void``` : Modifie la valeur d'une donnée
- ```delete(string $key): void``` : Supprime une donnée en fonction de sa clef

- **UploadedFile** : Représente la réponse HTTP à renvoyer au visiteur

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/UploadedFile.php

*Schéma*:

- ```__construct(array $fileinfo)``` : Constructeur
- ```getName(): string``` : Retourne le nom du fichier
- ```getType(): string``` : Retourne le type du fichier
- ```getSize(): int``` : Retourne la taille du fichier
- ```getReadableSize(): string``` : Retourne la taille du fichier (au format lisible)
- ```getContentType(): false|string``` : Retourne le type mime du contenu du fichier
- ```getError(): int``` : Retourne le numéro de l'erreur ou UPLOAD_ERR_OK si aucune erreur
- ```hasError(): bool``` : Indique si le téléversement comporte une erreur
- ```moveTo(string $directory): bool``` : Déplace le fichier téléversé dans le dossier de son choix

- **UploadedFiles** : Représente la liste des fichiers téléversés

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/UploadedFiles.php

*Schéma*:

- ```__construct()``` : Constructeur
- ```getList(): array``` : Retourne la liste des fichiers téléversés
- ```hasFile(string $elementName): bool``` : Indique si un fichier est téléversé par le nom du champ de formulaire HTML
- ```getFile(string $elementName): UploadedFile|array|false``` : Retourne le fichier téléversé par le nom du champ de formulaire HTML
- ```count(): int``` : Retourne le nombre de fichiers téléversés

### Les extensions facultatives:

#### Composants disponibles (/components/extended)

- **Session** : Gestionnaire de sessions paramètrable.

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/extended/Session.php

*Requiert*:

- Composant: 'components\core\Route'

- Configuration: SESSION_USE_COOKIES (facultatif)
- Configuration: SESSION_USE_ONLY_COOKIES (facultatif)
- Configuration: SESSION_USE_STRICT_MODE (facultatif)
- Configuration: SESSION_COOKIE_HTTPONLY (facultatif)
- Configuration: SESSION_COOKIE_SECURE (facultatif)
- Configuration: SESSION_COOKIE_SAMESITE (facultatif)
- Configuration: SESSION_USE_TRANS_ID (facultatif)
- Configuration: SESSION_CACHE_LIMITER (facultatif)
- Configuration: SESSION_URL_REWRITER_TAGS (facultatif)
- Configuration: SESSION_LIFETIME (facultatif)
- Configuration: SESSION_COOKIE_PATH (facultatif)

*Schéma*:

- ```__construct()``` : Constructeur
- ```destroy(): void``` : Nettoie et supprime tout le contenu de la session en cours
- ```exists(string $name): bool``` : Retourne si une clef existe par son nom
- ```get(string $name): mixed``` : Retourne la valeur d'une clef par son nom
- ```set(string $name, mixed $value): void``` : Défini la valeur d'une clef
- ```delete(string $name): void``` : Supprime une clef et sa valeur par son nom

*Exemple*:

```php
namespace middlewares {

use components\extended\Session;

class MyMiddleware {

public function __invoke(Response $response, Session $session): void {
if ($session->exists('myKey')) {
$value = $session->get('myKey');
$response->append(strval($value));
$session->delete('myKey');
}
}
}

}
```

- **MySQL** : Gestionnaire de données MySQL utilisant PDO.

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/extended/MySQL.php

*Requiert*:

- Composant: 'components\core\Route'

- Configuration: MYSQL_HOST (impératif)
- Configuration: MYSQL_PORT (impératif)
- Configuration: MYSQL_DATABASE (impératif)
- Configuration: MYSQL_USERNAME (impératif)
- Configuration: MYSQL_PASSWORD (impératif)

*Schéma*:

- ```__construct()``` : Constructeur
- ```__destruct()``` : Destructeur
- ```getInstance(): \PDO``` : Retourne l'instance PDO
- ```loadSqlFile(string $sqlFile): void``` : Charge le contenu d'un fichier SQL
- ```quote(mixed $value): string``` : Assainie une valeur
- ```execute(string $sql, ?array $args = null): int``` : Execute une requète
- ```count(string $sql, ?array $args = null): int``` : Retourne le nombre d'enregistrements trouvés
- ```unique(string $sql, ?array $args = null): array|bool``` : Retourne l'unique enregistrement trouvé
- ```first(string $sql, ?array $args = null): array|bool``` : Retourne le premier enregistrement trouvé
- ```all(string $sql, ?array $args = null): array``` : Retourne tous les enregistrements trouvés

*Exemples*:

```php
// MyMiddleware.php
namespace middlewares {

use components\extended\MySQL;

class MyMiddleware {

public static function __invoke(MySQL $sql): void {
$rows = $sql->all('SELECT * FROM users');
var_dump($rows);
}
}

}
```

- **TwigWrapper** : Permet l'utilisation de ```Twig``` via Syme. Requiert ```twig/twig:^3.0``` via Composer.

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/extended/TwigWrapper.php

*Requiert*:

- Composer: twig/twig:^3.0

- Composant: 'components\core\Response'
- Composant: 'components\core\Route'

*Schéma*:

- ```__construct(Response $response)``` : Constructeur
- ```createResponse(string $templateName, array $data = [], bool $toCurrentResponse = true): Response``` : Compile et charge le résultat dans une réponse HTTP
- ```::addFilter(string $name, callable $callback, array $options = []): void``` : Ajoute un filtre utilisable dans les templates
- ```::addFunction(string $name, callable $callback, array $options = []): void``` : Ajoute une fonction utilisable dans les templates

*Exemples*:

```php
// MyMiddleware.php
namespace middlewares {

use components\extended\TwigWrapper;

class MyMiddleware {

public static function __added(): void {
TwigWrapper::addFilter('bold', function (string $value): string {
return "$value";
});
}
}

}
```

```html

{% set foo = 'foo' %}




{{ title|upper }}


{{ foo|bold|raw }}


```

```php
// index.php
Route::get('home', '/', function (Response $response, TwigWrapper $twig): Response {
$twig->createResponse('home.html', [
'title' => "Syme"
]);
return $response;
});
Route::after('home', MyMiddleware::class);
```

#### Middlewares disponibles (/middlewares)

- **CsrfMiddleware** : Permet d'ajouter une protection contre les attaques CSRF aux formulaires HTML.

*Sources*: https://github.com/pantaflex44/Syme/blob/v1/middlewares/CsrfMiddleware.php

*Requiert*:

- Composant: 'components\core\Request'

- Composant: 'components\extended\Session'
- Composant: 'components\extended\TwigWrapper'

*Principe*:

Enregistre une fonction ```Twig``` nommée ```csrf(string $prefix)``` pour ajouter à un formulaire 2 champs cachés permettant de limiter les attaques de types CSRF.
Pour chaque route ayant ajoutée avant son exécution (Route::before) le middleware ```CsrfMiddleware::class```, une vérification de la présence des 2 champs nécessaires, ainsi
que la vérification des valeurs attendues, sont effectuées. En cas de manquement, une réponse 403 est renvoyée. En cas de mauvaises valeurs, une réponse 401 est renvoyée.



---

### Utiliser Bootstrap

En premier lieu, il faut installer ```Bootstrap``` via *Composer*:

```bash
$ composer require twbs/bootstrap

```

Ensuite, il faut créer le fichier ```bootstrap.install``` nécessaire au déploiement de ```Bootstrap``` à la racine du projet:

```php


Mon projet






Je suis le projet.

```

**C'est aussi simple que ça ;-)**

Vous pouvez désormais utiliser ```Bootstrap``` dans vos futurs projets.



---



![Syme](./Syme.png)