Install basic packages for webapp
make twig orm
This commit is contained in:
		
							
								
								
									
										9
									
								
								.env
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								.env
									
									
									
									
									
								
							| @@ -18,3 +18,12 @@ | |||||||
| APP_ENV=dev | APP_ENV=dev | ||||||
| APP_SECRET=a617c2ab616c5688ff5b0e95ad646641 | APP_SECRET=a617c2ab616c5688ff5b0e95ad646641 | ||||||
| ###< symfony/framework-bundle ### | ###< symfony/framework-bundle ### | ||||||
|  |  | ||||||
|  | ###> doctrine/doctrine-bundle ### | ||||||
|  | # Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url | ||||||
|  | # IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml | ||||||
|  | # | ||||||
|  | # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" | ||||||
|  | # DATABASE_URL="mysql://app:!ChangeMe!@127.0.0.1:3306/app?serverVersion=8&charset=utf8mb4" | ||||||
|  | DATABASE_URL="postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=15&charset=utf8" | ||||||
|  | ###< doctrine/doctrine-bundle ### | ||||||
|   | |||||||
| @@ -7,14 +7,19 @@ | |||||||
|         "php": ">=8.1", |         "php": ">=8.1", | ||||||
|         "ext-ctype": "*", |         "ext-ctype": "*", | ||||||
|         "ext-iconv": "*", |         "ext-iconv": "*", | ||||||
|  |         "doctrine/doctrine-bundle": "^2.9", | ||||||
|  |         "doctrine/doctrine-migrations-bundle": "^3.2", | ||||||
|  |         "doctrine/orm": "^2.14", | ||||||
|         "symfony/console": "6.2.*", |         "symfony/console": "6.2.*", | ||||||
|         "symfony/dotenv": "6.2.*", |         "symfony/dotenv": "6.2.*", | ||||||
|         "symfony/flex": "^2", |         "symfony/flex": "^2", | ||||||
|         "symfony/framework-bundle": "6.2.*", |         "symfony/framework-bundle": "6.2.*", | ||||||
|         "symfony/runtime": "6.2.*", |         "symfony/runtime": "6.2.*", | ||||||
|         "symfony/yaml": "6.2.*" |         "symfony/security-bundle": "6.2.*", | ||||||
|     }, |         "symfony/twig-bundle": "6.2.*", | ||||||
|     "require-dev": { |         "symfony/yaml": "6.2.*", | ||||||
|  |         "twig/extra-bundle": "^2.12|^3.0", | ||||||
|  |         "twig/twig": "^2.12|^3.0" | ||||||
|     }, |     }, | ||||||
|     "config": { |     "config": { | ||||||
|         "allow-plugins": { |         "allow-plugins": { | ||||||
| @@ -63,5 +68,8 @@ | |||||||
|             "allow-contrib": false, |             "allow-contrib": false, | ||||||
|             "require": "6.2.*" |             "require": "6.2.*" | ||||||
|         } |         } | ||||||
|  |     }, | ||||||
|  |     "require-dev": { | ||||||
|  |         "symfony/maker-bundle": "^1.48" | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										2673
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2673
									
								
								composer.lock
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -2,4 +2,10 @@ | |||||||
|  |  | ||||||
| return [ | return [ | ||||||
|     Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], |     Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], | ||||||
|  |     Symfony\Bundle\MakerBundle\MakerBundle::class => ['dev' => true], | ||||||
|  |     Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true], | ||||||
|  |     Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true], | ||||||
|  |     Twig\Extra\TwigExtraBundle\TwigExtraBundle::class => ['all' => true], | ||||||
|  |     Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true], | ||||||
|  |     Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], | ||||||
| ]; | ]; | ||||||
|   | |||||||
							
								
								
									
										44
									
								
								config/packages/doctrine.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								config/packages/doctrine.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | doctrine: | ||||||
|  |     dbal: | ||||||
|  |         url: '%env(resolve:DATABASE_URL)%' | ||||||
|  |  | ||||||
|  |         # IMPORTANT: You MUST configure your server version, | ||||||
|  |         # either here or in the DATABASE_URL env var (see .env file) | ||||||
|  |         #server_version: '15' | ||||||
|  |     orm: | ||||||
|  |         auto_generate_proxy_classes: true | ||||||
|  |         enable_lazy_ghost_objects: true | ||||||
|  |         naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware | ||||||
|  |         auto_mapping: true | ||||||
|  |         mappings: | ||||||
|  |             App: | ||||||
|  |                 is_bundle: false | ||||||
|  |                 dir: '%kernel.project_dir%/src/Entity' | ||||||
|  |                 prefix: 'App\Entity' | ||||||
|  |                 alias: App | ||||||
|  |  | ||||||
|  | when@test: | ||||||
|  |     doctrine: | ||||||
|  |         dbal: | ||||||
|  |             # "TEST_TOKEN" is typically set by ParaTest | ||||||
|  |             dbname_suffix: '_test%env(default::TEST_TOKEN)%' | ||||||
|  |  | ||||||
|  | when@prod: | ||||||
|  |     doctrine: | ||||||
|  |         orm: | ||||||
|  |             auto_generate_proxy_classes: false | ||||||
|  |             proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies' | ||||||
|  |             query_cache_driver: | ||||||
|  |                 type: pool | ||||||
|  |                 pool: doctrine.system_cache_pool | ||||||
|  |             result_cache_driver: | ||||||
|  |                 type: pool | ||||||
|  |                 pool: doctrine.result_cache_pool | ||||||
|  |  | ||||||
|  |     framework: | ||||||
|  |         cache: | ||||||
|  |             pools: | ||||||
|  |                 doctrine.result_cache_pool: | ||||||
|  |                     adapter: cache.app | ||||||
|  |                 doctrine.system_cache_pool: | ||||||
|  |                     adapter: cache.system | ||||||
							
								
								
									
										6
									
								
								config/packages/doctrine_migrations.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								config/packages/doctrine_migrations.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | doctrine_migrations: | ||||||
|  |     migrations_paths: | ||||||
|  |         # namespace is arbitrary but should be different from App\Migrations | ||||||
|  |         # as migrations classes should NOT be autoloaded | ||||||
|  |         'DoctrineMigrations': '%kernel.project_dir%/migrations' | ||||||
|  |     enable_profiler: false | ||||||
							
								
								
									
										43
									
								
								config/packages/security.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								config/packages/security.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | |||||||
|  | security: | ||||||
|  |     # https://symfony.com/doc/current/security.html#registering-the-user-hashing-passwords | ||||||
|  |     password_hashers: | ||||||
|  |         Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto' | ||||||
|  |     # https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider | ||||||
|  |     providers: | ||||||
|  |         # used to reload user from session & other features (e.g. switch_user) | ||||||
|  |         app_user_provider: | ||||||
|  |             entity: | ||||||
|  |                 class: App\Entity\User | ||||||
|  |                 property: username | ||||||
|  |     firewalls: | ||||||
|  |         dev: | ||||||
|  |             pattern: ^/(_(profiler|wdt)|css|images|js)/ | ||||||
|  |             security: false | ||||||
|  |         main: | ||||||
|  |             lazy: true | ||||||
|  |             provider: app_user_provider | ||||||
|  |  | ||||||
|  |             # activate different ways to authenticate | ||||||
|  |             # https://symfony.com/doc/current/security.html#the-firewall | ||||||
|  |  | ||||||
|  |             # https://symfony.com/doc/current/security/impersonating_user.html | ||||||
|  |             # switch_user: true | ||||||
|  |  | ||||||
|  |     # Easy way to control access for large sections of your site | ||||||
|  |     # Note: Only the *first* access control that matches will be used | ||||||
|  |     access_control: | ||||||
|  |         # - { path: ^/admin, roles: ROLE_ADMIN } | ||||||
|  |         # - { path: ^/profile, roles: ROLE_USER } | ||||||
|  |  | ||||||
|  | when@test: | ||||||
|  |     security: | ||||||
|  |         password_hashers: | ||||||
|  |             # By default, password hashers are resource intensive and take time. This is | ||||||
|  |             # important to generate secure password hashes. In tests however, secure hashes | ||||||
|  |             # are not important, waste resources and increase test times. The following | ||||||
|  |             # reduces the work factor to the lowest possible values. | ||||||
|  |             Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: | ||||||
|  |                 algorithm: auto | ||||||
|  |                 cost: 4 # Lowest possible value for bcrypt | ||||||
|  |                 time_cost: 3 # Lowest possible value for argon | ||||||
|  |                 memory_cost: 10 # Lowest possible value for argon | ||||||
							
								
								
									
										6
									
								
								config/packages/twig.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								config/packages/twig.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | twig: | ||||||
|  |     default_path: '%kernel.project_dir%/templates' | ||||||
|  |  | ||||||
|  | when@test: | ||||||
|  |     twig: | ||||||
|  |         strict_variables: true | ||||||
							
								
								
									
										0
									
								
								migrations/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								migrations/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								src/Entity/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/Entity/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										100
									
								
								src/Entity/User.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								src/Entity/User.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace App\Entity; | ||||||
|  |  | ||||||
|  | use App\Repository\UserRepository; | ||||||
|  | use Doctrine\ORM\Mapping as ORM; | ||||||
|  | use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; | ||||||
|  | use Symfony\Component\Security\Core\User\UserInterface; | ||||||
|  |  | ||||||
|  | #[ORM\Entity(repositoryClass: UserRepository::class)] | ||||||
|  | #[ORM\Table(name: '`user`')] | ||||||
|  | class User implements UserInterface, PasswordAuthenticatedUserInterface | ||||||
|  | { | ||||||
|  |     #[ORM\Id] | ||||||
|  |     #[ORM\GeneratedValue] | ||||||
|  |     #[ORM\Column] | ||||||
|  |     private ?int $id = null; | ||||||
|  |  | ||||||
|  |     #[ORM\Column(length: 180, unique: true)] | ||||||
|  |     private ?string $username = null; | ||||||
|  |  | ||||||
|  |     #[ORM\Column] | ||||||
|  |     private array $roles = []; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @var string The hashed password | ||||||
|  |      */ | ||||||
|  |     #[ORM\Column] | ||||||
|  |     private ?string $password = null; | ||||||
|  |  | ||||||
|  |     public function getId(): ?int | ||||||
|  |     { | ||||||
|  |         return $this->id; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function getUsername(): ?string | ||||||
|  |     { | ||||||
|  |         return $this->username; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function setUsername(string $username): self | ||||||
|  |     { | ||||||
|  |         $this->username = $username; | ||||||
|  |  | ||||||
|  |         return $this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * A visual identifier that represents this user. | ||||||
|  |      * | ||||||
|  |      * @see UserInterface | ||||||
|  |      */ | ||||||
|  |     public function getUserIdentifier(): string | ||||||
|  |     { | ||||||
|  |         return (string) $this->username; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @see UserInterface | ||||||
|  |      */ | ||||||
|  |     public function getRoles(): array | ||||||
|  |     { | ||||||
|  |         $roles = $this->roles; | ||||||
|  |         // guarantee every user at least has ROLE_USER | ||||||
|  |         $roles[] = 'ROLE_USER'; | ||||||
|  |  | ||||||
|  |         return array_unique($roles); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function setRoles(array $roles): self | ||||||
|  |     { | ||||||
|  |         $this->roles = $roles; | ||||||
|  |  | ||||||
|  |         return $this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @see PasswordAuthenticatedUserInterface | ||||||
|  |      */ | ||||||
|  |     public function getPassword(): string | ||||||
|  |     { | ||||||
|  |         return $this->password; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function setPassword(string $password): self | ||||||
|  |     { | ||||||
|  |         $this->password = $password; | ||||||
|  |  | ||||||
|  |         return $this; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * @see UserInterface | ||||||
|  |      */ | ||||||
|  |     public function eraseCredentials() | ||||||
|  |     { | ||||||
|  |         // If you store any temporary, sensitive data on the user, clear it here | ||||||
|  |         // $this->plainPassword = null; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										0
									
								
								src/Repository/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/Repository/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										83
									
								
								src/Repository/UserRepository.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								src/Repository/UserRepository.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | |||||||
|  | <?php | ||||||
|  |  | ||||||
|  | namespace App\Repository; | ||||||
|  |  | ||||||
|  | use App\Entity\User; | ||||||
|  | use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; | ||||||
|  | use Doctrine\Persistence\ManagerRegistry; | ||||||
|  | use Symfony\Component\Security\Core\Exception\UnsupportedUserException; | ||||||
|  | use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; | ||||||
|  | use Symfony\Component\Security\Core\User\PasswordUpgraderInterface; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @extends ServiceEntityRepository<User> | ||||||
|  |  * | ||||||
|  |  * @method User|null find($id, $lockMode = null, $lockVersion = null) | ||||||
|  |  * @method User|null findOneBy(array $criteria, array $orderBy = null) | ||||||
|  |  * @method User[]    findAll() | ||||||
|  |  * @method User[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | ||||||
|  |  */ | ||||||
|  | class UserRepository extends ServiceEntityRepository implements PasswordUpgraderInterface | ||||||
|  | { | ||||||
|  |     public function __construct(ManagerRegistry $registry) | ||||||
|  |     { | ||||||
|  |         parent::__construct($registry, User::class); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function save(User $entity, bool $flush = false): void | ||||||
|  |     { | ||||||
|  |         $this->getEntityManager()->persist($entity); | ||||||
|  |  | ||||||
|  |         if ($flush) { | ||||||
|  |             $this->getEntityManager()->flush(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public function remove(User $entity, bool $flush = false): void | ||||||
|  |     { | ||||||
|  |         $this->getEntityManager()->remove($entity); | ||||||
|  |  | ||||||
|  |         if ($flush) { | ||||||
|  |             $this->getEntityManager()->flush(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Used to upgrade (rehash) the user's password automatically over time. | ||||||
|  |      */ | ||||||
|  |     public function upgradePassword(PasswordAuthenticatedUserInterface $user, string $newHashedPassword): void | ||||||
|  |     { | ||||||
|  |         if (!$user instanceof User) { | ||||||
|  |             throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', \get_class($user))); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         $user->setPassword($newHashedPassword); | ||||||
|  |  | ||||||
|  |         $this->save($user, true); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | //    /** | ||||||
|  | //     * @return User[] Returns an array of User objects | ||||||
|  | //     */ | ||||||
|  | //    public function findByExampleField($value): array | ||||||
|  | //    { | ||||||
|  | //        return $this->createQueryBuilder('u') | ||||||
|  | //            ->andWhere('u.exampleField = :val') | ||||||
|  | //            ->setParameter('val', $value) | ||||||
|  | //            ->orderBy('u.id', 'ASC') | ||||||
|  | //            ->setMaxResults(10) | ||||||
|  | //            ->getQuery() | ||||||
|  | //            ->getResult() | ||||||
|  | //        ; | ||||||
|  | //    } | ||||||
|  |  | ||||||
|  | //    public function findOneBySomeField($value): ?User | ||||||
|  | //    { | ||||||
|  | //        return $this->createQueryBuilder('u') | ||||||
|  | //            ->andWhere('u.exampleField = :val') | ||||||
|  | //            ->setParameter('val', $value) | ||||||
|  | //            ->getQuery() | ||||||
|  | //            ->getOneOrNullResult() | ||||||
|  | //        ; | ||||||
|  | //    } | ||||||
|  | } | ||||||
							
								
								
									
										64
									
								
								symfony.lock
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								symfony.lock
									
									
									
									
									
								
							| @@ -1,4 +1,31 @@ | |||||||
| { | { | ||||||
|  |     "doctrine/doctrine-bundle": { | ||||||
|  |         "version": "2.9", | ||||||
|  |         "recipe": { | ||||||
|  |             "repo": "github.com/symfony/recipes", | ||||||
|  |             "branch": "main", | ||||||
|  |             "version": "2.8", | ||||||
|  |             "ref": "6b43b7b6ff6bf2551f2933ebeb66721fa3db8fbc" | ||||||
|  |         }, | ||||||
|  |         "files": [ | ||||||
|  |             "config/packages/doctrine.yaml", | ||||||
|  |             "src/Entity/.gitignore", | ||||||
|  |             "src/Repository/.gitignore" | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     "doctrine/doctrine-migrations-bundle": { | ||||||
|  |         "version": "3.2", | ||||||
|  |         "recipe": { | ||||||
|  |             "repo": "github.com/symfony/recipes", | ||||||
|  |             "branch": "main", | ||||||
|  |             "version": "3.1", | ||||||
|  |             "ref": "1d01ec03c6ecbd67c3375c5478c9a423ae5d6a33" | ||||||
|  |         }, | ||||||
|  |         "files": [ | ||||||
|  |             "config/packages/doctrine_migrations.yaml", | ||||||
|  |             "migrations/.gitignore" | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     "symfony/console": { |     "symfony/console": { | ||||||
|         "version": "6.2", |         "version": "6.2", | ||||||
|         "recipe": { |         "recipe": { | ||||||
| @@ -42,6 +69,15 @@ | |||||||
|             "src/Kernel.php" |             "src/Kernel.php" | ||||||
|         ] |         ] | ||||||
|     }, |     }, | ||||||
|  |     "symfony/maker-bundle": { | ||||||
|  |         "version": "1.48", | ||||||
|  |         "recipe": { | ||||||
|  |             "repo": "github.com/symfony/recipes", | ||||||
|  |             "branch": "main", | ||||||
|  |             "version": "1.0", | ||||||
|  |             "ref": "fadbfe33303a76e25cb63401050439aa9b1a9c7f" | ||||||
|  |         } | ||||||
|  |     }, | ||||||
|     "symfony/routing": { |     "symfony/routing": { | ||||||
|         "version": "6.2", |         "version": "6.2", | ||||||
|         "recipe": { |         "recipe": { | ||||||
| @@ -54,5 +90,33 @@ | |||||||
|             "config/packages/routing.yaml", |             "config/packages/routing.yaml", | ||||||
|             "config/routes.yaml" |             "config/routes.yaml" | ||||||
|         ] |         ] | ||||||
|  |     }, | ||||||
|  |     "symfony/security-bundle": { | ||||||
|  |         "version": "6.2", | ||||||
|  |         "recipe": { | ||||||
|  |             "repo": "github.com/symfony/recipes", | ||||||
|  |             "branch": "main", | ||||||
|  |             "version": "6.0", | ||||||
|  |             "ref": "8a5b112826f7d3d5b07027f93786ae11a1c7de48" | ||||||
|  |         }, | ||||||
|  |         "files": [ | ||||||
|  |             "config/packages/security.yaml" | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     "symfony/twig-bundle": { | ||||||
|  |         "version": "6.2", | ||||||
|  |         "recipe": { | ||||||
|  |             "repo": "github.com/symfony/recipes", | ||||||
|  |             "branch": "main", | ||||||
|  |             "version": "5.4", | ||||||
|  |             "ref": "bb2178c57eee79e6be0b297aa96fc0c0def81387" | ||||||
|  |         }, | ||||||
|  |         "files": [ | ||||||
|  |             "config/packages/twig.yaml", | ||||||
|  |             "templates/base.html.twig" | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     "twig/extra-bundle": { | ||||||
|  |         "version": "v3.5.1" | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								templates/base.html.twig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								templates/base.html.twig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html> | ||||||
|  |     <head> | ||||||
|  |         <meta charset="UTF-8"> | ||||||
|  |         <title>{% block title %}Welcome!{% endblock %}</title> | ||||||
|  |         <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>"> | ||||||
|  |         {# Run `composer require symfony/webpack-encore-bundle` to start using Symfony UX #} | ||||||
|  |         {% block stylesheets %} | ||||||
|  |             {{ encore_entry_link_tags('app') }} | ||||||
|  |         {% endblock %} | ||||||
|  |  | ||||||
|  |         {% block javascripts %} | ||||||
|  |             {{ encore_entry_script_tags('app') }} | ||||||
|  |         {% endblock %} | ||||||
|  |     </head> | ||||||
|  |     <body> | ||||||
|  |         {% block body %}{% endblock %} | ||||||
|  |     </body> | ||||||
|  | </html> | ||||||
		Reference in New Issue
	
	Block a user