Organisation projet Symfony

a marqué ce sujet comme résolu.

Bonjour à tous,

Il y’a quelques années j’ai développé une application web pour la gestion d’une entreprise en PHP sans framework et en procédurale. Elle fonctionne assez bien mais il y’a régulièrement des bugs et elle n’est pas du tout optimisée.

Entre temps je suis passé sur le framework CodeIgniter pour d’autres projets et aujourd’hui dans une utilisation personnelle je commence à utiliser Symfony.

J’aimerais revenir sur cette application faites il y’a quelques années pour la refaire entièrement sous Symfony car j’ai d’autres entreprises intéressées pour cette application. Mais tant qu’à faire j’aimerais bien faire quelque chose de plus pratique pour moi et pour les utilisateurs.

Mon but pour cette prochaine version ce serait d’avoir une solution pour déployer plusieurs fois l’application pour les différentes entreprises mais avec des étapes de configuration. Par exemple je dois installer l’application pour une entreprise je vais pouvoir choisir si elle a besoin de la gestion des clients, ou de la gestion des chantiers etc…

C’est peut-être un peu flou mais je pense que vous voyez où je veux en venir. Du coup je sais pas trop comment faire pour mettre en place ce genre de chose.

Derrière j’aimerais aussi qu’une fois l’application entre les mains de l’utilisateur il puisse configurer pas mal de choses. Comment ça se passe pour faire ce genre de chose ? Il vaut mieux utiliser un fichier de configuration ou gérer ça dans une table en base de données ?

Je pense que ça peut paraître comme questions pour certains mais jusqu’à présent j’ai jamais fait ce genre de configuration au sein de mes projets.

Merci d’avance

Si j’ai bien compris ta question porte sur la façon de configurer ton application (parce que ton post est quand même assez long :D )

Tu peux permettre de configurer via plusieurs moyens et cela dépend de qui tu as en face de toi:

  • Le client veut mettre les doigts dans l’application: un fichier non versionné c’est cool
  • Le client est l’administrateur système: Des variables d’environnement c’est intéressant
  • Le client n’est absolument pas tech: il faut enregistrer d’une autre façon

Pour le dernier point tu as évidemment plusieurs choix encore une fois:

  • Si la configuration est éphémère un fichier dans le cache de ton application sera efficace
  • Si la configuration doit être persistante il vaut mieux enregistrer cela dans une table de ta base de donnée (tout simplement parce que les fichiers de ton projet seront mis à jour au fil du temps et donc potentiellement effacés !) Tu peux aussi enregistrer dans un fichier sur un serveur de fichier (type AWS) mais là c’est peu être en faire un peu trop.

Perso pour les petites applis qui ont des options très simple je fais juste une table "option" => "valeur" et j’écris directement dans le code aux endroits où je m’en sers $parameters->get('foo', 'valeur par défaut'); et c’est cette instruction qui s’occupe de remplir la base si l’instruction n’existe pas encore. La valeur est ensuite modifiable dans l’interface d’administration.

+0 -0

Merci pour ta réponse.

Effectivement je n’ai pas précisé mais le client en face ne connaît absolument rien en informatique donc j’aurais voulu un peu un panneau d’options pour configurer l’application et ça rejoint la question du fichier de configuration ou de la base de données.

Si je comprends bien dans mon cas un simple fichier de configuration pourrait faire l’affaire car selon moi (à voir avec le temps) la configuration sera effectuée en début d’utilisation et après plus personne n’y touche (où du moins certaines options ne sont plus modifiables).

Pour ma première question qui concerne la possibilité de déployer mon application pour plusieurs clients de manière rapide, j’avais en tête une sorte de page d’installation que je lance la première fois (style installation WordPress) je sélectionne mes informations, les modules que je peux avoir besoin et en fonction de mes choix ça va générer les tables. Est-ce que c’est jouable ou ça sert pas à grand chose ?

Une dernière chose qui n’a rien à voir avec les points précédents. Dans mon application actuelle je génère des documents pour des clients et ceux-ci sont générés dans un dossier "public/devis/devis123456.pdf" par exemple.

Existe t-il une solution pour sécuriser l’accès à ces fichiers ? Par exemple je suis le client, j’accède à mon PDF. Si dans l’url je saisis un nom de PDF qui existe et qui ne m’appartient pas je peux le voir quand même et je trouve pas ça trop génial.

J’avoue que de ce côté là je n’ai jamais rien trouvé.

Encore merci de ta réponse.

Existe t-il une solution pour sécuriser l’accès à ces fichiers ? Par exemple je suis le client, j’accède à mon PDF. Si dans l’url je saisis un nom de PDF qui existe et qui ne m’appartient pas je peux le voir quand même et je trouve pas ça trop génial.

Ariol

Il faut passer par de la réécriture d’url. public/devis/devis123456.pdf va en fait être redirigée vers download-file.php?id=123456 qui va se charger de vérifier l’utilisateur et s’il a le droit d’accéder à ce fichier, et si oui, il va envoyer au client le fichier (dont le vrai nom est quelque chose plus aléatoire, p.e. private/s488d45s52a4ez8r4t1z5.pdf, et non accessible depuis l’extérieur) via par exemple readfile().

+0 -0

Merci pour ta réponse.

Si je comprends l’url sur laquelle on redirige contient l’id du devis en GET et du coup je récupère l’utilisateur grâce à sa session et via une requête je vérifie que l’utilisateur existe, est connecté que le devis existe et qu’il lui appartient bien ?

Par contre je suis pas sur d’avoir compris le coup du vrai nom de fichier ? ça change quoi au final ?

Encore merci

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte