{"id":18812882,"url":"https://github.com/pantaflex44/syme","last_synced_at":"2025-06-14T12:05:16.047Z","repository":{"id":210454343,"uuid":"726596743","full_name":"pantaflex44/Syme","owner":"pantaflex44","description":"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.","archived":false,"fork":false,"pushed_at":"2024-01-06T06:41:26.000Z","size":164,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"v1","last_synced_at":"2025-06-14T12:03:17.322Z","etag":null,"topics":["framework","php","route","syme"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pantaflex44.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-02T20:33:38.000Z","updated_at":"2025-03-04T23:08:57.000Z","dependencies_parsed_at":"2023-12-19T00:57:03.920Z","dependency_job_id":"1efcae20-2276-4ea2-8884-f42137391896","html_url":"https://github.com/pantaflex44/Syme","commit_stats":null,"previous_names":["pantaflex44/syme"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/pantaflex44/Syme","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pantaflex44%2FSyme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pantaflex44%2FSyme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pantaflex44%2FSyme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pantaflex44%2FSyme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pantaflex44","download_url":"https://codeload.github.com/pantaflex44/Syme/tar.gz/refs/heads/v1","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pantaflex44%2FSyme/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259812994,"owners_count":22915197,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["framework","php","route","syme"],"created_at":"2024-11-07T23:35:29.099Z","updated_at":"2025-06-14T12:05:16.021Z","avatar_url":"https://github.com/pantaflex44.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Syme\n\n*L'autre micro-framework PHP.*\n\n**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.\n\n\n## Installation\n\n### Automatique\n\n```bash\n$ composer create-project pantaflex44/syme\n```\n\n### Manuelle\n\n**Téléchargement du projet**\n```bash\n$ git clone https://github.com/pantaflex44/Syme.git syme\n$ cd syme\n```\n\n**Installation des dépendances**:\n```bash\n$ composer install\n```\n\n**Edition des configurations**:\n```bash\n$ sudo nano config.php\n```\n\n\n## Exemple d'utilisation\n\n```php\n\u003c?php\n\ndeclare(strict_types=1);\n\nrequire_once './core.php';\n\n\nuse components\\Data;\nuse components\\Request;\nuse components\\Response;\nuse components\\Route;\n\n\nRoute::get('home', '/', function (Response $response): Response {\n    $response\n        -\u003ewrite(\"Bonjour le monde\");\n\n    return $response;\n});\n\nRoute::get('article', '/article/{id:[0-9]+}/author/{name}', function (int $id, string $name, Response $response, Data $data): Response {\n    $obj = ['article id' =\u003e $id, 'author name' =\u003e $name];\n    $obj = array_merge($obj, $data-\u003eall());\n\n    $response\n        -\u003ewriteObject($obj)\n        -\u003ewithStatus(200);\n\n    return $response;\n});\nRoute::before('article', function(Request $request, Response $response, Data $data): void {\n    $data-\u003eset('who am i ?', \"I'm a midlleware ;-)\");\n});\n```\n\n\n\n# Documentation (v1)\n\n## Complète\n\n*(en cours...)*\nhttps://pantaflex44.gitbook.io/documentation-de-syme/\n\n\n## Rapide\n\n### Les composants du Framework (/components/core)\n\n- **Route** : Représente le moteur de routage\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/Route.php\n\n    *Schéma*:\n\n    - ```::extendWith(string $class): void``` : Ajoute un composant au système de routage pour le rendre accessible dans chaque routes, middlewares, ou autres composants\n    - ```::isAsset(Request $request): string|false``` : Indique si l'url correspond à un fichier à télécharger (fichier dans le dossier '/public')\n    - ```::sendAsset(string $filepath): void``` : Envoie au visiteur le fichier correspondant à l'url (fichier dans le dossier '/public')\n    - ```::exists(string $routeName): bool``` : Indique si une route existe par son nom\n    - ```::match(string $routeName): array|false``` : Retourne les informations d'une route par son nom\n    - ```::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\n    - ```::getUri(string $routeName, array $params = []): string|false``` : Retourne le chemin associé à une route et spécifiant les attributs\n    - ```::getPath(string $routeName, array $params = []): string|false``` : Retourne le chemin complet associé à une route et spécifiant les attributs\n    - ```::getUrl(string $routeName, array $params = []): string|false``` : Retourne l'url complète associée à une route et spécifiant les attributs\n    - ```::toRequest(string $routeName, array $params = []): Request|false``` : Transforme une route par son nom, en requète HTTP\n    - ```::redirect(string $routeName, array $params = [], int $status = 302): false``` : Redirige le visiteur vers une route en fonction de son nom\n    - ```::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\n    - ```::sendResponse(Request $initialRequest, null|Response $response): void``` : Envoie le contenu d'une réponse en fonction de la requète HTTP\n    - ```::any(string $name, string $uri, callable $callback): void``` : Enregistre une route pour toutes les méthodes HTTP\n    - ```::map(array $methods, string $name, string $uri, callable $callback): void``` : Enregistre une route pour les méthodes HTTP spécifiées\n    - ```::get(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP GET\n    - ```::post(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP POST\n    - ```::put(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP PUT\n    - ```::patch(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP PATCH\n    - ```::delete(string $name, string $uri, callable $callback): void``` : Enregistre une route pour la méthode HTTP DELETE\n    - ```::before(?string $routeName, callable|string $middleware): void``` : Enregistre un middleware devant s'exécuter avant la logique d'une route\n    - ```::after(?string $routeName, callable|string $middleware): void``` : Enregistre un middleware devant s'exécuter après la logique d'une route\n\n\n- **Request** : Représente la requète HTTP courante\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/Request.php\n\n    *Schéma*:\n\n    - ```__construct(string $url = null)``` : Constructeur\n    - ```::current(): Request``` : Retourne la requète courante\n    - ```getPath(): string``` : Retourne le chemin de l'url\n    - ```getUri(): string``` : Retourne la portion d'url correspondante au chemin\n    - ```getQueryString(): array``` : Retourne la liste des attributs de l'url\n    - ```getFragment(): string``` : Retourne le fragment de l'url\n    - ```getScheme(): string``` : Retourne le schéma HTTP\n    - ```getHost(): string``` : Retourne l'hôte\n    - ```getPort(): int``` : Retourne le port utilisé par l'hôte\n    - ```getDomain(): string``` : Retourne le domaine complet\n    - ```getMethod(): string``` : Retourne la méthode HTTP\n    - ```getAcceptedLanguage(): array``` : Retourne la liste des languages acceptés\n    - ```getAcceptedEncoding(): array``` : Retourne la liste des encodages acceptés\n    - ```getAcceptedTypes(): array``` : Retourne la liste des types de données acceptés\n    - ```getUserAgent(): string``` : Retourne l'agent HTTP\n    - ```getRemoteAddress(): string``` : Retourne l'adresse IP du visiteur\n    - ```getRemotePort(): int``` : Retourne le numéro du port utilisé par le visiteur\n    - ```getUrl(bool $full = false): string``` : Retourne l'url correspondante\n    - ```hasArgument(string $name): bool``` : Indique si l'url contient des attributs\n    - ```getArgument(string $name): false|string``` : Retourne un attribut par son nom\n    - ```isXHRRequest(): bool``` : Indique si c'est une requète AJAX\n    - ```hasHeader(string $header): bool``` : Indique si une entète HTTP existe\n    - ```getHeaders(): array``` : Retourne la liste des entètes HTTP\n    - ```getHeader(string $header): false|string``` : Retourne une entète HTTP par son nom\n    - ```getAuthorization(): string``` : Retourne le jeton d'authorisation\n    - ```getContent(): mixed``` : Retourne le contenu de la requète\n    - ```getContentType(): string``` : Retourne le type du contenu de la requète\n    - ```getForm(): null|object``` : Retourne le contenu d'un formulaire HTML\n    - ```hasForm(): bool``` : Indique si la requète contient un formlaire HTML\n    - ```getFiles(): UploadedFiles``` : Retourne la liste des fichiers téléversés\n    - ```getReferer(): bool|string``` : Retourne l'url de la page précédente\n\n\n- **Response** : Représente la réponse HTTP à renvoyer au visiteur\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/Response.php\n\n    *Schéma*:\n\n    - ```__construct(string $body = '', string $contentType = 'text/html')``` : Constructeur\n    - ```hasHeader(string $header): bool``` : Indique si une entète HTTP a été ajoutée\n    - ```removeHeader(string $headerKey): bool``` : Supprime une entète HTTP\n    - ```getHeaders(): array``` : Retourne la liste des entètes HTTP\n    - ```getHeader(string $header): false|string``` : Retourne une entète HTTP\n    - ```withHeader(string $header): Response``` : Ajoute une entète HTTP\n    - ```withBearerAuthorization(string $bearer): Response``` : Ajoute un un jeton d'authorization\n    - ```withHeaders(array $headers): Response``` : Ajoute une liste d'entètes HTTP\n    - ```getStatus(): int``` : Retourne le status HTTP courant\n    - ```withStatus(int $status): Response``` : Modifie le status de la réponse HTTP\n    - ```getContent(): string``` : Retourne le contenu brut de la réponse HTTP\n    - ```getGzipContent(): string``` : Retourne le contenu compressé de la réponse HTTP\n    - ```getContentType(): string``` : Retourne le type mime du contenu de la réponse\n    - ```getParsed(): array``` : Retourne le contenu décomposé de la réponse HTTP. (XML, Json, multipart, form, data)\n    - ```getJson(bool $associative = true): mixed``` : Retourne le contenu au format Json\n    - ```clear(): Response``` : Supprime le contenu de la réponse\n    - ```write(string $content, string $contentType = 'text/html'): Response``` : Modifie le contenu de la réponse HTTP\n    - ```prepend(string $content): Response``` : Ajoute du contenu avant la réponse HTTP\n    - ```append(string $content): Response``` : Ajoute du contenu après la réponse HTTP\n    - ```writeObject(mixed $object): Response``` : Tranforme un objet PHP en contenu Json puis l'écrit dans la réponse HTTP\n    - ```writeJson(string $json): Response``` : Ecrit du contenu Json dans la réponse HTTP\n\n\n- **Data** : Représente le conteneur de données personnelles capable de traverser l'ensemble des logiques (Routes, Middleswares, Composants)\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/Data.php\n\n    *Schéma*:\n\n    - ```__construct()``` : Constructeur.\n    - ```count(): int``` : Retourne le nombre de données enregistrées\n    - ```clear(): void``` : Supprime toutes les données\n    - ```all(): array``` : Retourne toutes les données enregistrées\n    - ```exists(string $key): bool``` : Indique si une donnée existe par le nom de sa clef\n    - ```get(string $key): mixed``` : Retourne la valeur d'une donnée en fonction du nom de sa clef\n    - ```set(string $key, mixed $value): void``` : Modifie la valeur d'une donnée\n    - ```delete(string $key): void``` : Supprime une donnée en fonction de sa clef\n\n\n- **UploadedFile** : Représente la réponse HTTP à renvoyer au visiteur\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/UploadedFile.php\n\n    *Schéma*:\n\n    - ```__construct(array $fileinfo)``` : Constructeur\n    - ```getName(): string``` : Retourne le nom du fichier\n    - ```getType(): string``` : Retourne le type du fichier\n    - ```getSize(): int``` : Retourne la taille du fichier\n    - ```getReadableSize(): string``` : Retourne la taille du fichier (au format lisible)\n    - ```getContentType(): false|string``` : Retourne le type mime du contenu du fichier\n    - ```getError(): int``` : Retourne le numéro de l'erreur ou UPLOAD_ERR_OK si aucune erreur\n    - ```hasError(): bool``` : Indique si le téléversement comporte une erreur\n    - ```moveTo(string $directory): bool``` : Déplace le fichier téléversé dans le dossier de son choix\n\n\n- **UploadedFiles** : Représente la liste des fichiers téléversés\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/core/UploadedFiles.php\n\n    *Schéma*:\n\n    - ```__construct()``` : Constructeur\n    - ```getList(): array``` : Retourne la liste des fichiers téléversés\n    - ```hasFile(string $elementName): bool``` : Indique si un fichier est téléversé par le nom du champ de formulaire HTML\n    - ```getFile(string $elementName): UploadedFile|array|false``` : Retourne le fichier téléversé par le nom du champ de formulaire HTML\n    - ```count(): int``` : Retourne le nombre de fichiers téléversés\n\n\n\n### Les extensions facultatives:\n\n#### Composants disponibles (/components/extended)\n\n- **Session** : Gestionnaire de sessions paramètrable.\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/extended/Session.php\n\n    *Requiert*:\n\n        - Composant: 'components\\core\\Route'\n\n        - Configuration: SESSION_USE_COOKIES (facultatif)\n        - Configuration: SESSION_USE_ONLY_COOKIES (facultatif)\n        - Configuration: SESSION_USE_STRICT_MODE (facultatif)\n        - Configuration: SESSION_COOKIE_HTTPONLY (facultatif)\n        - Configuration: SESSION_COOKIE_SECURE (facultatif)\n        - Configuration: SESSION_COOKIE_SAMESITE (facultatif)\n        - Configuration: SESSION_USE_TRANS_ID (facultatif)\n        - Configuration: SESSION_CACHE_LIMITER (facultatif)\n        - Configuration: SESSION_URL_REWRITER_TAGS (facultatif)\n        - Configuration: SESSION_LIFETIME (facultatif)\n        - Configuration: SESSION_COOKIE_PATH (facultatif)\n\n    *Schéma*:\n\n    - ```__construct()``` : Constructeur\n    - ```destroy(): void``` : Nettoie et supprime tout le contenu de la session en cours\n    - ```exists(string $name): bool``` : Retourne si une clef existe par son nom\n    - ```get(string $name): mixed``` : Retourne la valeur d'une clef par son nom\n    - ```set(string $name, mixed $value): void``` : Défini la valeur d'une clef\n    - ```delete(string $name): void``` : Supprime une clef et sa valeur par son nom\n\n    *Exemple*:\n\n    ```php\n    namespace middlewares {\n\n        use components\\extended\\Session;\n\n        class MyMiddleware {\n\n            public function __invoke(Response $response, Session $session): void {\n                if ($session-\u003eexists('myKey')) {\n                    $value = $session-\u003eget('myKey');\n                    $response-\u003eappend(strval($value));\n                    $session-\u003edelete('myKey');\n                }\n            }\n        }\n\n    }\n    ```\n        \n\n\n- **MySQL** : Gestionnaire de données MySQL utilisant PDO.\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/extended/MySQL.php\n\n    *Requiert*:\n\n        - Composant: 'components\\core\\Route'\n\n        - Configuration: MYSQL_HOST (impératif)\n        - Configuration: MYSQL_PORT (impératif)\n        - Configuration: MYSQL_DATABASE (impératif)\n        - Configuration: MYSQL_USERNAME (impératif)\n        - Configuration: MYSQL_PASSWORD (impératif)\n\n    *Schéma*:\n\n    - ```__construct()``` : Constructeur\n    - ```__destruct()``` : Destructeur\n    - ```getInstance(): \\PDO``` : Retourne l'instance PDO\n    - ```loadSqlFile(string $sqlFile): void``` : Charge le contenu d'un fichier SQL\n    - ```quote(mixed $value): string``` : Assainie une valeur\n    - ```execute(string $sql, ?array $args = null): int``` : Execute une requète\n    - ```count(string $sql, ?array $args = null): int``` : Retourne le nombre d'enregistrements trouvés\n    - ```unique(string $sql, ?array $args = null): array|bool``` : Retourne l'unique enregistrement trouvé\n    - ```first(string $sql, ?array $args = null): array|bool``` : Retourne le premier enregistrement trouvé\n    - ```all(string $sql, ?array $args = null): array``` : Retourne tous les enregistrements trouvés\n\n    *Exemples*:\n\n    ```php\n    // MyMiddleware.php\n    namespace middlewares {\n\n        use components\\extended\\MySQL;\n\n        class MyMiddleware {\n\n            public static function __invoke(MySQL $sql): void {\n                $rows = $sql-\u003eall('SELECT * FROM users');\n                var_dump($rows);\n            }\n        }\n\n    }\n    ```\n        \n\n\n- **TwigWrapper** : Permet l'utilisation de ```Twig``` via Syme. Requiert ```twig/twig:^3.0``` via Composer.\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/components/extended/TwigWrapper.php\n\n    *Requiert*:\n\n        - Composer: twig/twig:^3.0\n\n        - Composant: 'components\\core\\Response'\n        - Composant: 'components\\core\\Route'\n\n    *Schéma*:\n\n    - ```__construct(Response $response)``` : Constructeur\n    - ```createResponse(string $templateName, array $data = [], bool $toCurrentResponse = true): Response``` : Compile et charge le résultat dans une réponse HTTP\n    - ```::addFilter(string $name, callable $callback, array $options = []): void``` : Ajoute un filtre utilisable dans les templates\n    - ```::addFunction(string $name, callable $callback, array $options = []): void``` : Ajoute une fonction utilisable dans les templates\n\n    *Exemples*:\n\n    ```php\n    // MyMiddleware.php\n    namespace middlewares {\n\n        use components\\extended\\TwigWrapper;\n\n        class MyMiddleware {\n\n            public static function __added(): void {\n                TwigWrapper::addFilter('bold', function (string $value): string {\n                    return \"\u003cb\u003e$value\u003c/b\u003e\";\n                });\n            }\n        }\n\n    }\n    ```\n\n    ```html\n    \u003c!-- home.html --\u003e\n    {% set foo = 'foo' %}\n    \u003c!DOCTYPE html\u003e\n    \u003chtml lang=\"fr\"\u003e\n    \u003chead\u003e\n        \u003cmeta charset=\"utf-8\"\u003e\n        \u003ctitle\u003e{{ title|upper }}\u003c/title\u003e\n    \u003c/head\u003e\n    \u003cbody\u003e\n        {{ foo|bold|raw }}\n    \u003c/body\u003e\n    \u003c/html\u003e\n    ```\n\n    ```php\n    // index.php\n    Route::get('home', '/', function (Response $response, TwigWrapper $twig): Response {\n        $twig-\u003ecreateResponse('home.html', [\n            'title' =\u003e \"Syme\"\n        ]);\n        return $response;\n    });\n    Route::after('home', MyMiddleware::class);\n    ```\n\n        \n\n\n#### Middlewares disponibles (/middlewares)\n\n- **CsrfMiddleware** : Permet d'ajouter une protection contre les attaques CSRF aux formulaires HTML.\n\n    *Sources*: https://github.com/pantaflex44/Syme/blob/v1/middlewares/CsrfMiddleware.php\n\n    *Requiert*:\n\n        - Composant: 'components\\core\\Request'\n\n        - Composant: 'components\\extended\\Session'\n        - Composant: 'components\\extended\\TwigWrapper'\n\n    *Principe*:\n\n    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.\n    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\n    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.\n\n\u003cbr /\u003e\u003cbr /\u003e\n\n---\n\n### Utiliser Bootstrap\n\nEn premier lieu, il faut installer ```Bootstrap``` via *Composer*:\n\n```bash\n$ composer require twbs/bootstrap\n\n```\n\n\nEnsuite, il faut créer le fichier ```bootstrap.install``` nécessaire au déploiement de ```Bootstrap``` à la racine du projet:\n\n```php\n\u003c?php\n\nrequire_once(__DIR__ . '/functions.php');\n\n$bootstrapVendorDir = __DIR__ . '/vendor/twbs/bootstrap/dist';\n$bootstrapDir = __DIR__ . '/public/bootstrap';\nif (is_dir($bootstrapDir)) removeDir($bootstrapDir);\n\nmkdir($bootstrapDir, 0755);\ncopyDir($bootstrapVendorDir, $bootstrapDir);\n\n```\n\n\nPuis, modifier le fichier ```composer.json```:\n\n```json\n...\n\"scripts\": {\n    \"post-update-cmd\": [\n        \"@php bootstrap.install\"\n    ]\n}\n...\n\n```\n\n\nPour utiliser ```Bootstrap```, vous devez l'inclure dans vos future projet:\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n    \u003chead\u003e\n        \u003ctitle\u003eMon projet\u003c/title\u003e\n        \u003cmeta charset=\"UTF-8\" /\u003e\n        \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /\u003e\n\n        \u003cscript src=\"./bootstrap/js/bootstrap.min.js\"\u003e\u003c/script\u003e\n        \u003clink href=\"./bootstrap/css/bootstrap.min.css\" rel=\"stylesheet\" /\u003e\n        \n    \u003c/head\u003e\n    \u003cbody\u003e\n        Je suis le projet.\n    \u003c/body\u003e\n\u003c/html\u003e\n\n```\n\n\n**C'est aussi simple que ça ;-)**\n\nVous pouvez désormais utiliser ```Bootstrap``` dans vos futurs projets.\n\n\n\u003cbr /\u003e\u003cbr /\u003e\n\n---\n\n\u003cbr /\u003e\n\u003cdiv style=\"text-align: center;\"\u003e\n\n![Syme](./Syme.png)\n\n\u003c/div\u003e\n\u003cbr /\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpantaflex44%2Fsyme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpantaflex44%2Fsyme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpantaflex44%2Fsyme/lists"}