Ajout du support du markdown pour la description pour la question 6
This commit is contained in:
parent
76e4edc581
commit
a835a4e0f4
109
README.md
109
README.md
|
@ -1,53 +1,58 @@
|
|||
# CC34
|
||||
## Membres
|
||||
- Ayoub ZIANI
|
||||
- François ZHU
|
||||
- Zakarya BEN JABALLAH
|
||||
- Aymeric SERRA
|
||||
|
||||
## Questions
|
||||
### Question 1
|
||||
#### Création du projet
|
||||
```bash
|
||||
symfony new cc34 --webapp # Création du projet
|
||||
```
|
||||
|
||||
#### Création d'un controlleur
|
||||
```bash
|
||||
symfony console make:controller pages
|
||||
```
|
||||
|
||||
#### Bootsrap et Wepback Encore
|
||||
```bash
|
||||
symfony composer require symfony/webpack-encore-bundle
|
||||
npm install
|
||||
npm install bootstrap
|
||||
npm install bootstrap-icons
|
||||
# Modifier asset/app.js et config/package/twig.yaml
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Question 2
|
||||
```bash
|
||||
symfony console doctrine:database:create # Création de la base de donnée
|
||||
symfony console make:entity Atelier # Création d'une entité Atelier
|
||||
symfony console make:migration # Création d'une migration
|
||||
symfony console doctrine:migrations:migrate # On lance la migration
|
||||
```
|
||||
|
||||
### Question 3
|
||||
```bash
|
||||
symfony composer require fakerphp/faker
|
||||
symfony composer require orm-fixtures --dev
|
||||
symfony console doctrine:fixtures:load
|
||||
```
|
||||
|
||||
### Question 4
|
||||
```bash
|
||||
symfony console make:crud Atelier
|
||||
```
|
||||
|
||||
### Question 5
|
||||
```bash
|
||||
npm run dev
|
||||
# CC34
|
||||
## Membres
|
||||
- Ayoub ZIANI
|
||||
- François ZHU
|
||||
- Zakarya BEN JABALLAH
|
||||
- Aymeric SERRA
|
||||
|
||||
## Questions
|
||||
### Question 1
|
||||
#### Création du projet
|
||||
```bash
|
||||
symfony new cc34 --webapp # Création du projet
|
||||
```
|
||||
|
||||
#### Création d'un controlleur
|
||||
```bash
|
||||
symfony console make:controller pages
|
||||
```
|
||||
|
||||
#### Bootsrap et Wepback Encore
|
||||
```bash
|
||||
symfony composer require symfony/webpack-encore-bundle
|
||||
npm install
|
||||
npm install bootstrap
|
||||
npm install bootstrap-icons
|
||||
# Modifier asset/app.js et config/package/twig.yaml
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Question 2
|
||||
```bash
|
||||
symfony console doctrine:database:create # Création de la base de donnée
|
||||
symfony console make:entity Atelier # Création d'une entité Atelier
|
||||
symfony console make:migration # Création d'une migration
|
||||
symfony console doctrine:migrations:migrate # On lance la migration
|
||||
```
|
||||
|
||||
### Question 3
|
||||
```bash
|
||||
symfony composer require fakerphp/faker
|
||||
symfony composer require orm-fixtures --dev
|
||||
symfony console doctrine:fixtures:load
|
||||
```
|
||||
|
||||
### Question 4
|
||||
```bash
|
||||
symfony console make:crud Atelier
|
||||
```
|
||||
|
||||
### Question 5
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Question 6
|
||||
```bash
|
||||
symfony composer require cebe/markdown "~1.2.0"
|
||||
```
|
213
composer.json
213
composer.json
|
@ -1,106 +1,107 @@
|
|||
{
|
||||
"type": "project",
|
||||
"license": "proprietary",
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true,
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"ext-ctype": "*",
|
||||
"ext-iconv": "*",
|
||||
"doctrine/annotations": "^1.0",
|
||||
"doctrine/doctrine-bundle": "^2.8",
|
||||
"doctrine/doctrine-migrations-bundle": "^3.2",
|
||||
"doctrine/orm": "^2.14",
|
||||
"fakerphp/faker": "^1.21",
|
||||
"phpdocumentor/reflection-docblock": "^5.3",
|
||||
"phpstan/phpdoc-parser": "^1.16",
|
||||
"sensio/framework-extra-bundle": "^6.1",
|
||||
"symfony/asset": "6.2.*",
|
||||
"symfony/console": "6.2.*",
|
||||
"symfony/doctrine-messenger": "6.2.*",
|
||||
"symfony/dotenv": "6.2.*",
|
||||
"symfony/expression-language": "6.2.*",
|
||||
"symfony/flex": "^2",
|
||||
"symfony/form": "6.2.*",
|
||||
"symfony/framework-bundle": "6.2.*",
|
||||
"symfony/http-client": "6.2.*",
|
||||
"symfony/intl": "6.2.*",
|
||||
"symfony/mailer": "6.2.*",
|
||||
"symfony/mime": "6.2.*",
|
||||
"symfony/monolog-bundle": "^3.0",
|
||||
"symfony/notifier": "6.2.*",
|
||||
"symfony/process": "6.2.*",
|
||||
"symfony/property-access": "6.2.*",
|
||||
"symfony/property-info": "6.2.*",
|
||||
"symfony/runtime": "6.2.*",
|
||||
"symfony/security-bundle": "6.2.*",
|
||||
"symfony/serializer": "6.2.*",
|
||||
"symfony/string": "6.2.*",
|
||||
"symfony/translation": "6.2.*",
|
||||
"symfony/twig-bundle": "6.2.*",
|
||||
"symfony/validator": "6.2.*",
|
||||
"symfony/web-link": "6.2.*",
|
||||
"symfony/webpack-encore-bundle": "^1.16",
|
||||
"symfony/yaml": "6.2.*",
|
||||
"twig/extra-bundle": "^2.12|^3.0",
|
||||
"twig/twig": "^2.12|^3.0"
|
||||
},
|
||||
"config": {
|
||||
"allow-plugins": {
|
||||
"symfony/flex": true,
|
||||
"symfony/runtime": true
|
||||
},
|
||||
"sort-packages": true
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"App\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"replace": {
|
||||
"symfony/polyfill-ctype": "*",
|
||||
"symfony/polyfill-iconv": "*",
|
||||
"symfony/polyfill-php72": "*",
|
||||
"symfony/polyfill-php73": "*",
|
||||
"symfony/polyfill-php74": "*",
|
||||
"symfony/polyfill-php80": "*",
|
||||
"symfony/polyfill-php81": "*"
|
||||
},
|
||||
"scripts": {
|
||||
"auto-scripts": {
|
||||
"cache:clear": "symfony-cmd",
|
||||
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
||||
},
|
||||
"post-install-cmd": [
|
||||
"@auto-scripts"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@auto-scripts"
|
||||
]
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/symfony": "*"
|
||||
},
|
||||
"extra": {
|
||||
"symfony": {
|
||||
"allow-contrib": false,
|
||||
"require": "6.2.*"
|
||||
}
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/doctrine-fixtures-bundle": "^3.4",
|
||||
"phpunit/phpunit": "^10.0",
|
||||
"symfony/browser-kit": "6.2.*",
|
||||
"symfony/css-selector": "6.2.*",
|
||||
"symfony/debug-bundle": "6.2.*",
|
||||
"symfony/maker-bundle": "^1.0",
|
||||
"symfony/phpunit-bridge": "^6.2",
|
||||
"symfony/stopwatch": "6.2.*",
|
||||
"symfony/web-profiler-bundle": "6.2.*"
|
||||
}
|
||||
}
|
||||
{
|
||||
"type": "project",
|
||||
"license": "proprietary",
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true,
|
||||
"require": {
|
||||
"php": ">=8.1",
|
||||
"ext-ctype": "*",
|
||||
"ext-iconv": "*",
|
||||
"cebe/markdown": "~1.2.0",
|
||||
"doctrine/annotations": "^1.0",
|
||||
"doctrine/doctrine-bundle": "^2.8",
|
||||
"doctrine/doctrine-migrations-bundle": "^3.2",
|
||||
"doctrine/orm": "^2.14",
|
||||
"fakerphp/faker": "^1.21",
|
||||
"phpdocumentor/reflection-docblock": "^5.3",
|
||||
"phpstan/phpdoc-parser": "^1.16",
|
||||
"sensio/framework-extra-bundle": "^6.1",
|
||||
"symfony/asset": "6.2.*",
|
||||
"symfony/console": "6.2.*",
|
||||
"symfony/doctrine-messenger": "6.2.*",
|
||||
"symfony/dotenv": "6.2.*",
|
||||
"symfony/expression-language": "6.2.*",
|
||||
"symfony/flex": "^2",
|
||||
"symfony/form": "6.2.*",
|
||||
"symfony/framework-bundle": "6.2.*",
|
||||
"symfony/http-client": "6.2.*",
|
||||
"symfony/intl": "6.2.*",
|
||||
"symfony/mailer": "6.2.*",
|
||||
"symfony/mime": "6.2.*",
|
||||
"symfony/monolog-bundle": "^3.0",
|
||||
"symfony/notifier": "6.2.*",
|
||||
"symfony/process": "6.2.*",
|
||||
"symfony/property-access": "6.2.*",
|
||||
"symfony/property-info": "6.2.*",
|
||||
"symfony/runtime": "6.2.*",
|
||||
"symfony/security-bundle": "6.2.*",
|
||||
"symfony/serializer": "6.2.*",
|
||||
"symfony/string": "6.2.*",
|
||||
"symfony/translation": "6.2.*",
|
||||
"symfony/twig-bundle": "6.2.*",
|
||||
"symfony/validator": "6.2.*",
|
||||
"symfony/web-link": "6.2.*",
|
||||
"symfony/webpack-encore-bundle": "^1.16",
|
||||
"symfony/yaml": "6.2.*",
|
||||
"twig/extra-bundle": "^2.12|^3.0",
|
||||
"twig/twig": "^2.12|^3.0"
|
||||
},
|
||||
"config": {
|
||||
"allow-plugins": {
|
||||
"symfony/flex": true,
|
||||
"symfony/runtime": true
|
||||
},
|
||||
"sort-packages": true
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "src/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"App\\Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"replace": {
|
||||
"symfony/polyfill-ctype": "*",
|
||||
"symfony/polyfill-iconv": "*",
|
||||
"symfony/polyfill-php72": "*",
|
||||
"symfony/polyfill-php73": "*",
|
||||
"symfony/polyfill-php74": "*",
|
||||
"symfony/polyfill-php80": "*",
|
||||
"symfony/polyfill-php81": "*"
|
||||
},
|
||||
"scripts": {
|
||||
"auto-scripts": {
|
||||
"cache:clear": "symfony-cmd",
|
||||
"assets:install %PUBLIC_DIR%": "symfony-cmd"
|
||||
},
|
||||
"post-install-cmd": [
|
||||
"@auto-scripts"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@auto-scripts"
|
||||
]
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/symfony": "*"
|
||||
},
|
||||
"extra": {
|
||||
"symfony": {
|
||||
"allow-contrib": false,
|
||||
"require": "6.2.*"
|
||||
}
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/doctrine-fixtures-bundle": "^3.4",
|
||||
"phpunit/phpunit": "^10.0",
|
||||
"symfony/browser-kit": "6.2.*",
|
||||
"symfony/css-selector": "6.2.*",
|
||||
"symfony/debug-bundle": "6.2.*",
|
||||
"symfony/maker-bundle": "^1.0",
|
||||
"symfony/phpunit-bridge": "^6.2",
|
||||
"symfony/stopwatch": "6.2.*",
|
||||
"symfony/web-profiler-bundle": "6.2.*"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,8 +4,72 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "bc632d4e0ebaf53085b8673163075690",
|
||||
"content-hash": "04a6abe7b394e2037e82619227d2a76e",
|
||||
"packages": [
|
||||
{
|
||||
"name": "cebe/markdown",
|
||||
"version": "1.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/cebe/markdown.git",
|
||||
"reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/cebe/markdown/zipball/9bac5e971dd391e2802dca5400bbeacbaea9eb86",
|
||||
"reference": "9bac5e971dd391e2802dca5400bbeacbaea9eb86",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"lib-pcre": "*",
|
||||
"php": ">=5.4.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"cebe/indent": "*",
|
||||
"facebook/xhprof": "*@dev",
|
||||
"phpunit/phpunit": "4.1.*"
|
||||
},
|
||||
"bin": [
|
||||
"bin/markdown"
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.2.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"cebe\\markdown\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Carsten Brandt",
|
||||
"email": "mail@cebe.cc",
|
||||
"homepage": "http://cebe.cc/",
|
||||
"role": "Creator"
|
||||
}
|
||||
],
|
||||
"description": "A super fast, highly extensible markdown parser for PHP",
|
||||
"homepage": "https://github.com/cebe/markdown#readme",
|
||||
"keywords": [
|
||||
"extensible",
|
||||
"fast",
|
||||
"gfm",
|
||||
"markdown",
|
||||
"markdown-extra"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/cebe/markdown/issues",
|
||||
"source": "https://github.com/cebe/markdown"
|
||||
},
|
||||
"time": "2018-03-26T11:24:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/annotations",
|
||||
"version": "1.14.3",
|
||||
|
|
|
@ -22,3 +22,5 @@ services:
|
|||
|
||||
# add more service definitions when explicit configuration is needed
|
||||
# please note that last definitions always *replace* previous ones
|
||||
|
||||
cebe\markdown\Markdown: ~
|
||||
|
|
|
@ -1,78 +1,80 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\Atelier;
|
||||
use App\Form\AtelierType;
|
||||
use App\Repository\AtelierRepository;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
#[Route('/atelier')]
|
||||
class AtelierController extends AbstractController
|
||||
{
|
||||
#[Route('/', name: 'app_atelier_index', methods: ['GET'])]
|
||||
public function index(AtelierRepository $atelierRepository): Response
|
||||
{
|
||||
return $this->render('atelier/index.html.twig', [
|
||||
'ateliers' => $atelierRepository->findAll(),
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/new', name: 'app_atelier_new', methods: ['GET', 'POST'])]
|
||||
public function new(Request $request, AtelierRepository $atelierRepository): Response
|
||||
{
|
||||
$atelier = new Atelier();
|
||||
$form = $this->createForm(AtelierType::class, $atelier);
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$atelierRepository->save($atelier, true);
|
||||
|
||||
return $this->redirectToRoute('app_atelier_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
|
||||
return $this->renderForm('atelier/new.html.twig', [
|
||||
'atelier' => $atelier,
|
||||
'form' => $form,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/{id}', name: 'app_atelier_show', methods: ['GET'])]
|
||||
public function show(Atelier $atelier): Response
|
||||
{
|
||||
return $this->render('atelier/show.html.twig', [
|
||||
'atelier' => $atelier,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/{id}/edit', name: 'app_atelier_edit', methods: ['GET', 'POST'])]
|
||||
public function edit(Request $request, Atelier $atelier, AtelierRepository $atelierRepository): Response
|
||||
{
|
||||
$form = $this->createForm(AtelierType::class, $atelier);
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$atelierRepository->save($atelier, true);
|
||||
|
||||
return $this->redirectToRoute('app_atelier_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
|
||||
return $this->renderForm('atelier/edit.html.twig', [
|
||||
'atelier' => $atelier,
|
||||
'form' => $form,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/{id}', name: 'app_atelier_delete', methods: ['POST'])]
|
||||
public function delete(Request $request, Atelier $atelier, AtelierRepository $atelierRepository): Response
|
||||
{
|
||||
if ($this->isCsrfTokenValid('delete'.$atelier->getId(), $request->request->get('_token'))) {
|
||||
$atelierRepository->remove($atelier, true);
|
||||
}
|
||||
|
||||
return $this->redirectToRoute('app_atelier_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\Atelier;
|
||||
use App\Form\AtelierType;
|
||||
use App\Repository\AtelierRepository;
|
||||
use App\Services\MarkdownAtelier;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
#[Route('/atelier')]
|
||||
class AtelierController extends AbstractController
|
||||
{
|
||||
#[Route('/', name: 'app_atelier_index', methods: ['GET'])]
|
||||
|
||||
public function index(AtelierRepository $atelierRepository, MarkdownAtelier $markdown): Response
|
||||
{
|
||||
return $this->render('atelier/index.html.twig', [
|
||||
'ateliers' => $markdown->parseArray($atelierRepository->findAll()),
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/new', name: 'app_atelier_new', methods: ['GET', 'POST'])]
|
||||
public function new(Request $request, AtelierRepository $atelierRepository): Response
|
||||
{
|
||||
$atelier = new Atelier();
|
||||
$form = $this->createForm(AtelierType::class, $atelier);
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$atelierRepository->save($atelier, true);
|
||||
|
||||
return $this->redirectToRoute('app_atelier_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
|
||||
return $this->renderForm('atelier/new.html.twig', [
|
||||
'atelier' => $atelier,
|
||||
'form' => $form,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/{id}', name: 'app_atelier_show', methods: ['GET'])]
|
||||
public function show(Atelier $atelier, MarkdownAtelier $markdownAtelier): Response
|
||||
{
|
||||
return $this->render('atelier/show.html.twig', [
|
||||
'atelier' => $markdownAtelier->parse($atelier),
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/{id}/edit', name: 'app_atelier_edit', methods: ['GET', 'POST'])]
|
||||
public function edit(Request $request, Atelier $atelier, AtelierRepository $atelierRepository): Response
|
||||
{
|
||||
$form = $this->createForm(AtelierType::class, $atelier);
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
$atelierRepository->save($atelier, true);
|
||||
|
||||
return $this->redirectToRoute('app_atelier_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
|
||||
return $this->renderForm('atelier/edit.html.twig', [
|
||||
'atelier' => $atelier,
|
||||
'form' => $form,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/{id}', name: 'app_atelier_delete', methods: ['POST'])]
|
||||
public function delete(Request $request, Atelier $atelier, AtelierRepository $atelierRepository): Response
|
||||
{
|
||||
if ($this->isCsrfTokenValid('delete'.$atelier->getId(), $request->request->get('_token'))) {
|
||||
$atelierRepository->remove($atelier, true);
|
||||
}
|
||||
|
||||
return $this->redirectToRoute('app_atelier_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
class PagesController extends AbstractController
|
||||
{
|
||||
#[Route('/', name: 'app_index')]
|
||||
public function index(): Response
|
||||
{
|
||||
return $this->render('pages/index.html.twig', [
|
||||
'controller_name' => 'PagesController',
|
||||
]);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
class PagesController extends AbstractController
|
||||
{
|
||||
#[Route('/', name: 'app_index')]
|
||||
public function index(): Response
|
||||
{
|
||||
return $this->render('pages/index.html.twig', [
|
||||
'controller_name' => 'PagesController',
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,26 +1,27 @@
|
|||
<?php
|
||||
|
||||
namespace App\Form;
|
||||
|
||||
use App\Entity\Atelier;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class AtelierType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$builder
|
||||
->add('nom')
|
||||
->add('description')
|
||||
;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
'data_class' => Atelier::class,
|
||||
]);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
namespace App\Form;
|
||||
|
||||
use App\Entity\Atelier;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
|
||||
class AtelierType extends AbstractType
|
||||
{
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$builder
|
||||
->add('nom')
|
||||
->add('description', TextAreaType::class)
|
||||
;
|
||||
}
|
||||
|
||||
public function configureOptions(OptionsResolver $resolver): void
|
||||
{
|
||||
$resolver->setDefaults([
|
||||
'data_class' => Atelier::class,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Entity\Atelier;
|
||||
use cebe\markdown\Markdown;
|
||||
|
||||
class MarkdownAtelier
|
||||
{
|
||||
protected $markdown;
|
||||
|
||||
public function __construct(Markdown $markdown)
|
||||
{
|
||||
$this->markdown = $markdown;
|
||||
}
|
||||
|
||||
public function parse(Atelier $atelier) : Atelier
|
||||
{
|
||||
$parseAtelier = $atelier;
|
||||
$parseAtelier->setDescription($this->markdown->parse($atelier->getDescription()));
|
||||
return $parseAtelier;
|
||||
}
|
||||
|
||||
public function parseArray(array $ateliers) : array
|
||||
{
|
||||
$parsedAteliers = [];
|
||||
foreach ($ateliers as $atelier) {
|
||||
$parseAtelier = $atelier;
|
||||
$parseAtelier->setDescription($this->markdown->parse($atelier->getDescription()));
|
||||
$parsedAteliers[] = $parseAtelier;
|
||||
}
|
||||
return $parsedAteliers;
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
<form method="post" action="{{ path('app_atelier_delete', {'id': atelier.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ atelier.id) }}">
|
||||
<button class="btn btn-outline-danger m-2" >Supprimer</button>
|
||||
</form>
|
||||
<form method="post" action="{{ path('app_atelier_delete', {'id': atelier.id}) }}" onsubmit="return confirm('Are you sure you want to delete this item?');">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ atelier.id) }}">
|
||||
<button class="btn btn-outline-danger m-2" >Supprimer</button>
|
||||
</form>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{{ form_start(form) }}
|
||||
{{ form_widget(form) }}
|
||||
<div class="d-flex flex-row">
|
||||
<button class="btn btn-outline-primary m-2">{{ button_label|default('Save') }}</button>
|
||||
|
||||
<a class="btn btn-outline-primary m-2" href="{{ path('app_atelier_index') }}">Retour à la liste</a>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
{{ form_start(form) }}
|
||||
{{ form_widget(form) }}
|
||||
<div class="d-flex flex-row">
|
||||
<button class="btn btn-outline-primary m-2">{{ button_label|default('Save') }}</button>
|
||||
|
||||
<a class="btn btn-outline-primary m-2" href="{{ path('app_atelier_index') }}">Retour à la liste</a>
|
||||
</div>
|
||||
{{ form_end(form) }}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Modifier l'atelier{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1>Modifier l'atelier</h1>
|
||||
|
||||
{{ include('atelier/_form.html.twig', {'button_label': 'Mettre à jour'}) }}
|
||||
|
||||
{{ include('atelier/_delete_form.html.twig') }}
|
||||
{% endblock %}
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Modifier l'atelier{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1>Modifier l'atelier</h1>
|
||||
|
||||
{{ include('atelier/_form.html.twig', {'button_label': 'Mettre à jour'}) }}
|
||||
|
||||
{{ include('atelier/_delete_form.html.twig') }}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,43 +1,43 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Atelier index{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1>Atelier index</h1>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="row">Id</th>
|
||||
<th scope="col">Nom</th>
|
||||
<th class="" scope="col">Description</th>
|
||||
<th scope="col">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for atelier in ateliers %}
|
||||
<tr>
|
||||
<td>{{ atelier.id }}</td>
|
||||
<td>{{ atelier.nom }}</td>
|
||||
<td>{{ atelier.description }}</td>
|
||||
<td>
|
||||
<div class="d-flex flex-row">
|
||||
<a class="btn btn-outline-primary m-1"
|
||||
href="{{ path('app_atelier_show', {'id': atelier.id}) }}">Afficher</a>
|
||||
<a class="btn btn-outline-primary m-1"
|
||||
href="{{ path('app_atelier_edit', {'id': atelier.id}) }}">Modifier</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="4">no records found</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
<a class="btn btn-primary mb-3" href="{{ path('app_atelier_new') }}">Créer atelier</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Atelier index{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1>Atelier index</h1>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="row">Id</th>
|
||||
<th scope="col">Nom</th>
|
||||
<th class="" scope="col">Description</th>
|
||||
<th scope="col">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for atelier in ateliers %}
|
||||
<tr>
|
||||
<td>{{ atelier.id }}</td>
|
||||
<td>{{ atelier.nom }}</td>
|
||||
<td>{{ atelier.description | raw }}</td>
|
||||
<td>
|
||||
<div class="d-flex flex-row">
|
||||
<a class="btn btn-outline-primary m-1"
|
||||
href="{{ path('app_atelier_show', {'id': atelier.id}) }}">Afficher</a>
|
||||
<a class="btn btn-outline-primary m-1"
|
||||
href="{{ path('app_atelier_edit', {'id': atelier.id}) }}">Modifier</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="4">no records found</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="d-flex justify-content-center">
|
||||
<a class="btn btn-primary mb-3" href="{{ path('app_atelier_new') }}">Créer atelier</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Nouvel atelier{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1>Créer un nouvel atelier</h1>
|
||||
|
||||
{{ include('atelier/_form.html.twig', {'button_label': 'Sauvegarder'}) }}
|
||||
{% endblock %}
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Nouvel atelier{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1>Créer un nouvel atelier</h1>
|
||||
|
||||
{{ include('atelier/_form.html.twig', {'button_label': 'Sauvegarder'}) }}
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,31 +1,31 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Atelier{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1>Atelier</h1>
|
||||
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Id</th>
|
||||
<td>{{ atelier.id }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Nom</th>
|
||||
<td>{{ atelier.nom }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Description</th>
|
||||
<td>{{ atelier.description }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="d-flex flex-row">
|
||||
<a class="btn btn-outline-primary m-2" href="{{ path('app_atelier_edit', {'id': atelier.id}) }}">Modifier</a>
|
||||
<a class="btn btn-outline-primary m-2" href="{{ path('app_atelier_index') }}">Retour à la liste</a>
|
||||
{{ include('atelier/_delete_form.html.twig') }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Atelier{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1>Atelier</h1>
|
||||
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>Id</th>
|
||||
<td>{{ atelier.id }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Nom</th>
|
||||
<td>{{ atelier.nom }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Description</th>
|
||||
<td>{{ atelier.description | raw }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="d-flex flex-row">
|
||||
<a class="btn btn-outline-primary m-2" href="{{ path('app_atelier_edit', {'id': atelier.id}) }}">Modifier</a>
|
||||
<a class="btn btn-outline-primary m-2" href="{{ path('app_atelier_index') }}">Retour à la liste</a>
|
||||
{{ include('atelier/_delete_form.html.twig') }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
|
|
@ -1,43 +1,43 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{% block title %}Welcome!{% endblock %}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<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>
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="#">CC34</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" aria-current="page" href="{{ path('app_index') }}">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ path('app_atelier_index') }}">Atelier</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container">{% block body %}{% endblock %}</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{% block title %}Welcome!{% endblock %}</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<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>
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="#">CC34</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link active" aria-current="page" href="{{ path('app_index') }}">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ path('app_atelier_index') }}">Atelier</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container">{% block body %}{% endblock %}</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Reference in New Issue