Bonsoir à tous,
J'ai une application symfony qui doit avoir 3 IHM différentes : un public, un portail et un admin.
Chacun de ces fronts doit avoir son propre design et utilise des librairies différentes (vue.js, ...).
Comment organiseriez-vous cette application ?
Je vous remercie du coup de main.
Hello,
Pour ma part dans le dossiers assets, je crée l'arborescence avec les 3 dossiers correspondants aux 3 front.
Dans webpack-encore je crée 3 entrée de script :
.addEntry('app-public', ['core-js/stable', 'regenerator-runtime/runtime', './assets_encore/public/index.tsx'])
.addEntry('app-portail', ['core-js/stable', 'regenerator-runtime/runtime', './assets_encore/portail/index.tsx'])
.addEntry('app-admin', ['core-js/stable', 'regenerator-runtime/runtime', './assets_encore/admin/index.tsx'])
Ensuite au niveau du twig dans le dossier templates je crée un fichier base.html.twig
qui ressemble à ceci :
<!DOCTYPE html>
<html lang="{{ app.request.locale|split('_')[0] }}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="App description">
<meta name="author" content="Cédric Bapst">
<title>{% block title %}Mon app{% endblock %}</title>
<link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
{% block stylesheets %}{% endblock %}
</head>
<body>
{% block body %}{% endblock %}
{% block javascripts %}{% endblock %}
</body>
</html>
Puis toujours dans le dossier templates je crée à nouveau 3 répertoires, un public
, un portail
et un admin
dans lesquels j'ajoute pour chacun un fichier layout.html
qui étend le fichier base.html.twig
et depuis là j'injecte la feuille de style et fichier javascript, un ex. pour le fichier layout.html.twig qui serait dans le dossier admin :
{% extends 'base.html.twig' %}
{% block title %}App - Admin{% endblock %}
{% block stylesheets %}
{{ encore_entry_link_tags('app-admin') }}
{% endblock %}
{% block body %}
{% block content %}{% endblock %}
{% endblock %}
{% block javascripts %}
{{ encore_entry_script_tags('app-admin') }}
{% endblock %}
Avec ce que je te propose tu peux le faire sans problème, vue que chaque dossier front à son point d'entrée (dans mon ex. index.tsx => j'utilise React / Typescript).
assets/portail/index.tsx => tu pars avec ton dev React
assets/admin/index.tsx => tu renomme le fichier en index.ts (ou l'extension que tu souhaites / as besoin),, tu adaptes l'entrée de webpack-encore et tu démarres depuis ici ton dev VueJS / Typescript
Ne pas oublié dans webpack-encore d'injecter le support de React, VueJS et Typescript et d'installer les dépendances.
.enableReactPreset()
.enableVueLoader()
.enableTypeScriptLoader()
Super merci, belle proposition. Ca fonctionne.
Question subsidiaire : comment gérer pour qu'un dossier utilise vue.js en typescript (par exemple l'admin) et un autre en react (par exemple le portail) ?