Home page (empty except “home”)

+ Add AssertMapper (“import”)
+ Load bootstrap (SASS) and popper
+ Base twig template
master
Julien Rosset 1 year ago
parent 20b0f9669d
commit af44fc426b

4
.gitignore vendored

@ -20,3 +20,7 @@
###> Composer ### ###> Composer ###
/composer.lock /composer.lock
###< Composer ### ###< Composer ###
###> symfony/asset-mapper ###
/public/assets/
/assets/vendor/
###< symfony/asset-mapper ###

@ -0,0 +1,6 @@
//region CSS
import './styles/app.scss';
//endregion
//region Bootstrap
import 'bootstrap';
//endregion

@ -0,0 +1,76 @@
//region Fonctions de base de Bootstrap
@import '../../vendor/twbs/bootstrap/scss/functions';
//endregion
//region Color theme
//$primary : rgb(0, 0, 0);
//$secondary : rgb(102, 102, 102);
$alert-padding-y : 0.25rem;
$alert-padding-x : 0.25rem;
$alert-margin-bottom : 0.5rem;
//endregion
//region Autres variables Bootstrap
$enable-rounded : false;
$nav-link-padding-y : 0;
$box-shadow : 0px 3px 15px 0 rgba(0, 0, 0, .8);
//endregion
//region Les autres variables de Boostrap
@import '../../vendor/twbs/bootstrap/scss/variables';
@import '../../vendor/twbs/bootstrap/scss/variables-dark';
//endregion
//region Maps personnalisés
//endregion
//region Reste de la configuration de Bootstrap
@import '../../vendor/twbs/bootstrap/scss/maps';
@import '../../vendor/twbs/bootstrap/scss/mixins';
@import '../../vendor/twbs/bootstrap/scss/utilities';
//endregion
//region Layout & components de Bootstrap
@import '../../vendor/twbs/bootstrap/scss/root';
@import '../../vendor/twbs/bootstrap/scss/reboot';
@import '../../vendor/twbs/bootstrap/scss/type';
@import '../../vendor/twbs/bootstrap/scss/images';
@import '../../vendor/twbs/bootstrap/scss/containers';
@import '../../vendor/twbs/bootstrap/scss/grid';
@import '../../vendor/twbs/bootstrap/scss/tables';
@import '../../vendor/twbs/bootstrap/scss/forms';
@import '../../vendor/twbs/bootstrap/scss/buttons';
@import '../../vendor/twbs/bootstrap/scss/transitions';
@import '../../vendor/twbs/bootstrap/scss/dropdown';
@import '../../vendor/twbs/bootstrap/scss/button-group';
@import '../../vendor/twbs/bootstrap/scss/nav';
@import '../../vendor/twbs/bootstrap/scss/navbar';
@import '../../vendor/twbs/bootstrap/scss/card';
@import '../../vendor/twbs/bootstrap/scss/accordion';
@import '../../vendor/twbs/bootstrap/scss/breadcrumb';
@import '../../vendor/twbs/bootstrap/scss/pagination';
@import '../../vendor/twbs/bootstrap/scss/badge';
@import '../../vendor/twbs/bootstrap/scss/alert';
@import '../../vendor/twbs/bootstrap/scss/progress';
@import '../../vendor/twbs/bootstrap/scss/list-group';
@import '../../vendor/twbs/bootstrap/scss/close';
@import '../../vendor/twbs/bootstrap/scss/toasts';
@import '../../vendor/twbs/bootstrap/scss/modal';
@import '../../vendor/twbs/bootstrap/scss/tooltip';
@import '../../vendor/twbs/bootstrap/scss/popover';
@import '../../vendor/twbs/bootstrap/scss/carousel';
@import '../../vendor/twbs/bootstrap/scss/spinners';
@import '../../vendor/twbs/bootstrap/scss/offcanvas';
@import '../../vendor/twbs/bootstrap/scss/placeholders';
//endregion
//region Helpers de Boostrap
@import '../../vendor/twbs/bootstrap/scss/helpers';
//endregion
//region API de Bootstrap
@import '../../vendor/twbs/bootstrap/scss/utilities/api';
//endregion
//region Classes complémentaires
.text-smallCaps {
font-variant : small-caps;
}
.text-overflow-ellipsis {
text-overflow : '';
}
//endregion

@ -0,0 +1,3 @@
#flashes {
font-size : 0.75rem;
}

@ -0,0 +1,2 @@
@import 'bootstrap';
@import 'flahses';

@ -4,44 +4,47 @@
"minimum-stability": "stable", "minimum-stability": "stable",
"prefer-stable": true, "prefer-stable": true,
"require": { "require": {
"php": ">=8.1", "php": ">=8.1",
"ext-ctype": "*", "ext-ctype": "*",
"ext-iconv": "*", "ext-iconv": "*",
"doctrine/annotations": "^2.0", "doctrine/annotations": "^2.0",
"doctrine/doctrine-bundle": "^2.9", "doctrine/doctrine-bundle": "^2.9",
"doctrine/doctrine-migrations-bundle": "^3.2", "doctrine/doctrine-migrations-bundle": "^3.2",
"doctrine/orm": "^2.15", "doctrine/orm": "^2.15",
"phpdocumentor/reflection-docblock": "^5.3", "phpdocumentor/reflection-docblock": "^5.3",
"phpstan/phpdoc-parser": "^1.20", "phpstan/phpdoc-parser": "^1.20",
"stof/doctrine-extensions-bundle": "^1.7", "stof/doctrine-extensions-bundle": "^1.7",
"symfony/asset": "6.4.*", "symfony/asset": "6.4.*",
"symfony/console": "6.4.*", "symfony/asset-mapper": "6.4.*",
"symfony/doctrine-messenger": "6.4.*", "symfony/console": "6.4.*",
"symfony/dotenv": "6.4.*", "symfony/doctrine-messenger": "6.4.*",
"symfony/dotenv": "6.4.*",
"symfony/expression-language": "6.4.*", "symfony/expression-language": "6.4.*",
"symfony/flex": "^2", "symfony/flex": "^2",
"symfony/form": "6.4.*", "symfony/form": "6.4.*",
"symfony/framework-bundle": "6.4.*", "symfony/framework-bundle": "6.4.*",
"symfony/http-client": "6.4.*", "symfony/http-client": "6.4.*",
"symfony/intl": "6.4.*", "symfony/intl": "6.4.*",
"symfony/mailer": "6.4.*", "symfony/mailer": "6.4.*",
"symfony/mime": "6.4.*", "symfony/mime": "6.4.*",
"symfony/monolog-bundle": "^3.0", "symfony/monolog-bundle": "^3.0",
"symfony/notifier": "6.4.*", "symfony/notifier": "6.4.*",
"symfony/process": "6.4.*", "symfony/process": "6.4.*",
"symfony/property-access": "6.4.*", "symfony/property-access": "6.4.*",
"symfony/property-info": "6.4.*", "symfony/property-info": "6.4.*",
"symfony/runtime": "6.4.*", "symfony/runtime": "6.4.*",
"symfony/security-bundle": "6.4.*", "symfony/security-bundle": "6.4.*",
"symfony/serializer": "6.4.*", "symfony/serializer": "6.4.*",
"symfony/string": "6.4.*", "symfony/string": "6.4.*",
"symfony/translation": "6.4.*", "symfony/translation": "6.4.*",
"symfony/twig-bundle": "6.4.*", "symfony/twig-bundle": "6.4.*",
"symfony/validator": "6.4.*", "symfony/validator": "6.4.*",
"symfony/web-link": "6.4.*", "symfony/web-link": "6.4.*",
"symfony/yaml": "6.4.*", "symfony/yaml": "6.4.*",
"twig/extra-bundle": "^3.0", "symfonycasts/sass-bundle": "^0.6.0",
"twig/twig": "^3.0" "twbs/bootstrap": "^5.3",
"twig/extra-bundle": "^3.0",
"twig/twig": "^3.0"
}, },
"config": { "config": {
"allow-plugins": { "allow-plugins": {
@ -73,7 +76,8 @@
"scripts": { "scripts": {
"auto-scripts": { "auto-scripts": {
"cache:clear": "symfony-cmd", "cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd" "assets:install %PUBLIC_DIR%": "symfony-cmd",
"importmap:install": "symfony-cmd"
}, },
"post-install-cmd": [ "post-install-cmd": [
"@auto-scripts" "@auto-scripts"

@ -1,15 +1,16 @@
<?php <?php
return [ return [
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true],
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true], Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true],
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true], Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true],
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true], Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true],
Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true], Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle::class => ['all' => true],
Symfonycasts\SassBundle\SymfonycastsSassBundle::class => ['all' => true],
]; ];

@ -0,0 +1,8 @@
framework:
asset_mapper:
# The paths to make available to the asset mapper.
paths:
- assets/
excluded_patterns:
- '*/assets/styles/_*.scss'
- '*/assets/styles/**/_*.scss'

@ -0,0 +1,25 @@
<?php
/**
* Returns the importmap for this application.
*
* - "path" is a path inside the asset mapper system. Use the
* "debug:asset-map" command to see the full list of paths.
*
* - "entrypoint" (JavaScript only) set to true for any module that will
* be used as an "entrypoint" (and passed to the importmap() Twig function).
*
* The "importmap:require" command can be used to add new entries to this file.
*/
return [
'app' => [
'path' => './assets/app.js',
'entrypoint' => true,
],
'bootstrap' => [
'version' => '5.3.3',
],
'@popperjs/core' => [
'version' => '2.11.8',
],
];

@ -0,0 +1,20 @@
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
/**
* Controller for core page : home, etc.
*/
class CoreController extends AbstractController {
#[Route('/', name: 'core_main')]
public function main (): Response {
$this->addFlash('danger', 'This is a dangerous looking message');
$this->addFlash('success', 'All is fine !');
return $this->render('core/main.html.twig');
}
}

@ -61,6 +61,21 @@
"./config/packages/stof_doctrine_extensions.yaml" "./config/packages/stof_doctrine_extensions.yaml"
] ]
}, },
"symfony/asset-mapper": {
"version": "6.4",
"recipe": {
"repo": "github.com/symfony/recipes",
"branch": "main",
"version": "6.4",
"ref": "6c28c471640cc2c6e60812ebcb961c526ef8997f"
},
"files": [
"./assets/app.js",
"./assets/styles/app.css",
"./config/packages/asset_mapper.yaml",
"./importmap.php"
]
},
"symfony/console": { "symfony/console": {
"version": "6.2", "version": "6.2",
"recipe": { "recipe": {
@ -276,6 +291,9 @@
"./config/packages/messenger.yaml" "./config/packages/messenger.yaml"
] ]
}, },
"symfonycasts/sass-bundle": {
"version": "v0.6.0"
},
"twig/extra-bundle": { "twig/extra-bundle": {
"version": "v3.6.0" "version": "v3.6.0"
} }

@ -0,0 +1,12 @@
{% block flashTag %}
<section id="flashes" class="d-flex flex-column">
{% endblock %}
{% for flashType, flashMessages in app.flashes %}
{% for flashMessage in flashMessages %}
<div class="alert alert-{{ flashType }} alert-dismissible fade show" role="{{ flashType }}">
{{ flashMessage }}
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
{% endfor %}
</section>

@ -1,19 +1,63 @@
<!DOCTYPE html> {% extends "/html.html.twig" %}
<html>
<head> {% block headContent %}
<meta charset="UTF-8"> {% block headContentMeta %}
<title>{% block title %}Welcome!{% endblock %}</title> <meta charset="utf-8">
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text></svg>"> <meta name="viewport" content="width=device-width, initial-scale=1">
{# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #} {% endblock %}
{% block stylesheets %}
{{ encore_entry_link_tags('app') }} <title>{% block title %}{% endblock %}</title>
{% block CSS %}{% endblock %}
{% block JS_head %}{% endblock %}
{% endblock %}
{% block bodyTag %}
<body id="page-{{ app.current_route }}">
{% endblock %}
{% block bodyContent %}
{% block headerTag %}
<header>
{% endblock %}
{% block headerContent %}{% endblock %}
</header>
{% block divBodyTag %}
<div id="div-body" class="d-flex flex-row">
{% endblock %} {% endblock %}
{% block asideLeft %}{% endblock %}
{% block centerDivBodyTag %}
<div id="div-body-center" class="d-flex flex-column flex-grow-1">
{% endblock %}
{% block sectionTop %}{% endblock %}
{% include '/_flashes.html.twig' %}
{% block sectionBefore %}{% endblock %}
{% block mainTag %}
<main>
{% endblock %}
{% block mainContent %}{% endblock %}
</main>
{% block sectionAfter %}{% endblock %}
</div>
{% block asideRight %}{% endblock %}
</div>
{% block footerTag %}
<footer>
{% endblock %}
{% block footerContent %}{% endblock %}
</footer>
<div class="d-none">
{% block bodyHidden %}{% endblock %}
</div>
{% block javascripts %} {% block JS %}
{{ encore_entry_script_tags('app') }} {% block importmap %}{{ importmap('app') }}{% endblock %}
{% endblock %} {% endblock %}
</head> {% endblock %}
<body>
{% block body %}{% endblock %}
</body>
</html>

@ -0,0 +1,7 @@
{% extends '/base.html.twig' %}
{% block title %}Home{% endblock %}
{% block mainContent %}
Home
{% endblock %}

@ -0,0 +1,21 @@
{% extends "/root.twig" %}
{% block pageContent %}
<!DOCTYPE html>
{% block htmlTag %}
<html lang="{{ app.request.getLocale() }}">
{% endblock %}
{% block headTag %}
<!--suppress HtmlRequiredTitleElement -->
<head>
{% endblock %}
{% block headContent %}{% endblock %}
</head>
{% block bodyTag %}
<body>
{% endblock %}
{% block bodyContent %}{% endblock %}
</body>
</html>
{% endblock %}

@ -0,0 +1 @@
{% block pageContent %}{% endblock %}
Loading…
Cancel
Save