Aller au menu - Aller au contenu

[symfony2] subdomain + backend

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Résolu Le problème de ce sujet a été résolu

Offre d'emploi : Développeur Web PHP/Drupal (H/F)

Page 1  2  Suivante
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1  2  Suivante
Hors ligne judas_le_philosophe # Posté le 08/02/2012 à 13:18:58

Bonjour,

Je suis de nouveau confronté à sujet sans réponse concernant Symfony2.

Pour le site d'un client, j'ai besoin d'utiliser un système de sous-domaine:

www.monsite.fr / monsite.fr -> partie visible par tout le monde
client.monsite.fr -> accès à l'espace client
admin.monsite.fr -> accès à l'administration du site

Il y a trois types d'utilisateurs: les internautes, les clients, les administrateurs

En utilisant le système de routing de symfony2:

monsite.fr/admin
monsite.fr/client
monsite.fr/mon-compte

Mes bundles seront utilisés partout, exemple:

J'ai un bundle: ProductBundle et un autre CommentaireBundle (un produit a plusieurs commentaires)

-> les clients peuvent ajouter/modifier/supprimer des produits, et signaler des commentaires abusifs depuis leur espace clients

-> les administrateurs peuvent supprimer un commentaire signalé abusif

-> les internautes connectés peuvent rédiger des commentaires sur les produits

-> les produits et commentaires peuvent être vus par tout le monde

La solution idéale serai d'utiliser l'url rewriting d'apache depuis le .htacces

client.* -> app.php/site

J'ai tout essayé et cette solution ne semble pas fonctionner -
cela me semble logique car au niveau du fichier de sécurité le firewall attend un pattern de type '/client/*' pour l'espace client et un firewall de type '/admin/*' pour le backend

Une autre solution:

http://www.developpez.net/forums/d1173 [...] ous-domaines/

Mais avant de m'y lancer j'aimerai savoir si elle respecte la philosophie de symfony2

Merci d'avance

Publicité # Posté le 08/02/2012 à 13:18:58

Hors ligne anonyme # Posté le 08/02/2012 à 15:36:53

Salut,

Tu peux faire faire une copie de ton app.php en app_client.php et faire pointer ton sous-domaine vers ce fichier.

Tu peux créer ainsi différents environements qui auront alors différents fichiers de configuration de routing selon le domaine (à toi de limiter les différences).

Tu peux trouver des infos et des exemples dans un des cookbooks de Symfony :

http://symfony.com/doc/current/cookboo [...] ronments.html


Hors ligne judas_le_philosophe # Posté le 08/02/2012 à 15:44:58

Salut,

Merci pour ta réponse.

En utilisant ta méthode, cela ne risque pas de dupliquer les caches ?

Si je ne me trompes pas, c'est un cache par environnement ?

Hors ligne anonyme # Posté le 08/02/2012 à 15:51:39

Si en effet. Mais pour l'instant et vu les autres solutions déjà vues sur divers forums, je pencherais pour celle-ci.

En fait perso je pencherais pour une solution encore plus radicale : pas de sous-domaines pour une banalité pareille.

Edit:

Mmmmh je viens de penser à une autre solution :

Dans ton virtual host apache, tu peux créer des constantes (par ex pour le virtual host apache tu met une constante USER_DOMAIN = client)

Cette constante tu peux la récupérer dans ton AppKernel.php ou dans tes fichiers de config yaml et utiliser le loader pour charger les fichiers de routing spécifiques au domaine en question.

Hors ligne judas_le_philosophe # Posté le 08/02/2012 à 16:03:20

Le problème, c'est que j'ai simplifié la chose, en faite l'utilisation des sous-domaines est plus poussé:

Tu peux avoir:

ville.monsite.fr -> avec l'ensemble des villes de France (soit une base de donnée de 37 000 villes)
departement.monsite.fr -> avec l'ensemble des départements Français
region.monsite.fr -> avec l'ensemble des régions Françaises

Ensuite ont doit pouvoir accéder à tous les produits d'un client par leur slug:

www.monsite.fr/slug-du-client

Les espaces:

admin.monsite.fr
client.monsite.fr
webmail.monsite.fr -> pas de problème c'est une autre application

Et enfin je sais pas encore de quelle manière, mais je dois également inclure la possibilité d'avoir le site en différentes langues (donc aussi a inclure dans mon url)

Donc je pense que ça va être dur de se passer des sous-domaine.

Par contre avec ta solution, n'y a t'il pas de conflits au niveau des caches ?
Édité le 08/02/2012 à 16:04:46 par judas_le_philosophe
Hors ligne anonyme # Posté le 08/02/2012 à 16:05:34

je viens d'éditer
Hors ligne judas_le_philosophe # Posté le 08/02/2012 à 16:43:19

Peux tu être un peu plus explicite ?

Comment faire la différence entre

monsite.com/admin et monsite.com/client

Un petit exemple serai le bienvenue si tu as le temps bien sûr

Merci
Édité le 08/02/2012 à 17:13:52 par judas_le_philosophe
Connecté th3punish3r15 # Posté le 08/02/2012 à 18:25:06
Be cool

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Salut,

C'est une question de route ça ^^.

J'avais le même problème pour les sous domaines (enfin moi c'était pour du virtuel, pour générer à la volée, mais ça fonctionne pareil).
Vas voir ce lien : http://www.siteduzero.com/forum-83-711 [...] virtuels.html et code ton système.

Bye ;)
Hors ligne judas_le_philosophe # Posté le 08/02/2012 à 19:18:40

Salut th3punish3r15,

Déjà merci pour ta réponse !!!

Avant de poster mon topic, j'avais déjà lu ta solution. Elle me semble tout à fait adapté pour gérer les domaines

ville.monsite.fr
departement.monsite.com
region.monsite.com

Je récupère le nom du sous-domaine et l'enregistre dans la session de l'utilisateur s'il n'est pas connecté et dans la base de donnée s'il est connecté.

Par contre dans le cas des mes 2 administrations:

j'ai besoin:

client.monsite.fr/produits/
client.monsite.fr/paiement/
client.monsite.fr/factures/
client.monsite.fr/transactions/
...

Dans le cas présent il ne s'agit pas de récupérer des informations et les enregistrer en session, mais de rediriger des actions vers différents bundles, donc différents controlleurs.

Je ne suis donc pas sûr que dans le cas suivant ta solution puisse fonctionner.

A moins que tu as une meilleure vue sur le problème.
Édité le 08/02/2012 à 19:39:50 par judas_le_philosophe
Hors ligne anonyme # Posté le 08/02/2012 à 23:16:46

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Je vais essayer d'expliquer au mieux en espérant que cela réponde à tes besoins :

Tu crées deux fichiers de routing distincts (1 pour le domaine client.*, l'autre pour le domaine admin.*) qui auront une route "/" différente donc pour clients cela amènera à /clients et pour admin cela amènera à /admin

Code : yaml
1
2
3
4
#routing_client.yml
application_home:
  pattern: /
  default: { _controller: MonsiteBundle:Client:index }


Code : yaml
1
2
3
4
#routing_admin.yml
application_home:
  pattern: /
  default: { _controller: MonsiteBundle:Admin:index }


Dans ton virtual host, tu définis une variable d'environnement qui aura pour valeur client et admin en fonction de client.monsite.com et admin.monsite.com

Code : Apache
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<VirtualHost *:80>
    ServerName      client.monsite.com
    DocumentRoot    "/path/to/symfony_2_app/web"
    DirectoryIndex  app.php
    SetEnv          SYMFONY__SUBDOMAIN__FINDER client

    <Directory "/path/to/symfony_2_app/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>


Code : Apache
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<VirtualHost *:80>
    ServerName      admin.monsite.com
    DocumentRoot    "/path/to/symfony_2_app/web"
    DirectoryIndex  app.php
    SetEnv          SYMFONY__SUBDOMAIN__FINDER admin

    <Directory "/path/to/symfony_2_app/web">
        AllowOverride All
        Allow from All
    </Directory>
</VirtualHost>


Dans ton fichier routing.yml, tu récupères cette variable d'environnement qui charge le fichier de routing correspondant :

Code : yaml
1
2
home_finder:
  resource: "%kernel.root_dir%/config/config_%subdomain.finder%.yml"


Ainsi tu peux avoir des fichiers de routing voir même des fichiers de configuration différents en fonction du sous-domaine visité.

J'espère que j'ai répondu à tes besoins.

Bonne soirée
Hors ligne judas_le_philosophe # Posté le 09/02/2012 à 08:17:13

Salut picowebo,

Franchement merci beaucoup, tu assures, je crois que ta solution est parfaite, et surtout très propre.

C'est la partie suivante qu'il me manquait:
Code : Apache
1
2
home_finder:
  resource: "%kernel.root_dir%/config/config_%subdomain.finder%.yml"


Je pensais que je devais bidouiller quelque chose dans AppKernel.

En plus j'avais déjà des fichiers de routing différent.

Je te pose une dernière question du coup, j'ai également un layout et des fichiers css différents pour chaque partie du site, ou me recommandes tu de les placer ?

Directement dans App/Ressources
-> layout_client, layout, layout_admin et dans web/css admin/style.css, client/style.css

ou bien

Créer un Bundle DashboardBundle pour la partie client et un autre pour la partie admin.
Et mettre les layout, et ressources dans le bundle.

En tout cas encore merci à toi

Connecté th3punish3r15 # Posté le 09/02/2012 à 08:26:01
Be cool

Cette réponse a aidé l'auteur du sujet Cette réponse a aidé l'auteur du sujet
Citation : judas_le_philosophe
Secret (cliquez pour afficher)
Salut th3punish3r15,

Déjà merci pour ta réponse !!!

Avant de poster mon topic, j'avais déjà lu ta solution. Elle me semble tout à fait adapté pour gérer les domaines

ville.monsite.fr
departement.monsite.com
region.monsite.com

Je récupère le nom du sous-domaine et l'enregistre dans la session de l'utilisateur s'il n'est pas connecté et dans la base de donnée s'il est connecté.

Par contre dans le cas des mes 2 administrations:

j'ai besoin:

client.monsite.fr/produits/
client.monsite.fr/paiement/
client.monsite.fr/factures/
client.monsite.fr/transactions/
...

Dans le cas présent il ne s'agit pas de récupérer des informations et les enregistrer en session, mais de rediriger des actions vers différents bundles, donc différents controlleurs.

Je ne suis donc pas sûr que dans le cas suivant ta solution puisse fonctionner.

A moins que tu as une meilleure vue sur le problème.

Salut,

En fait si, tu peux faire tout ce que tu souhaites depuis ce système (y suffit de bien le penser). Ce que je cherchais à faire, c'est des sous domaines à la volée, c'est à dire des sous domaines mais n'existant pas vraiment. Donc en gros il s'agit simplement d'un mot dans l'url, tu peux en faire ce que tu veux et tu peux rajouter ce que tu veux à l'url. Il faut juste que tu codes ce qui va avec. J'avais par exemple pensé étendre le router pour lui permettre de faire quelque chose de plus évolué (donc sous domaines, ajout de filtres, etc.).

Pour la solution de picowebo, c'est bien trouvé. Mais c'est limités aux personnes ayant un serveur (ou acces au serveur, donc pour du mutualisé, c'est à oublier). Et si tu souhaites faire quelque chose à la volée, il faut oublier aussi, à moins de créer à chaque fois un nouveau VirtualHost. Mais si tu n'as que quelques sous domaines à faire, c'est une bonne solution, c'est rapide, j'imagine que ça marche et au moins tu as ce que tu veux.

Pourquoi faire un bundle pour 2 layout sachant que tu as déjà ce qu'il faut dans Sf2 :o ? De plus, tu charges le layout correspondant selon l'endroit où ce trouve l'utilisateur, donc encore une fois, pourquoi refaire un bundle pour placer 5 fichiers dedans ?

Bye ;)
Hors ligne judas_le_philosophe # Posté le 09/02/2012 à 09:02:46

Salut,

Effectivement j'ai vu que tu préparais un bundle qu'on puisse réutiliser et qui ne soit pas limité à une application.

En faite, la solution de picowebo me plait beaucoup car mes applications sont vraiment différentes. Je veux dire par là que les configs, les routes, les assets sont différents. Seule quelques routes comme les CGV, Nous contacter ont besoin
d'être partagé.

Par contre ta solution m'intéresse beaucoup pour générer tous mes sous-domaines dynamique:

langues, villes, départements, régions, ...

En utilisant ta solution, parfait je récupère les sous-domaines, je les filtre, et ensuite j'effectue le traitement adéquat.

Ensuite il me restera encore un gros problème à résoudre:

Comment recréer dans mes twig le path incluant le sous-domaine. Je pense bien sûr à une extension twig basé sur le modèle existant, mais je n'ai pas encore creusé...

Voici mon site en version beta:

http://www.twnsq.fr/annonces/

http://nancy.twnsq.fr/annonces/

http://moselle.twnsq.fr/annonces/

La version en ligne n'utilise pas le framework symfony.

Bye ;)
Hors ligne Nek' # Posté le 09/02/2012 à 12:34:45
LPL FTW
Avatar

Ville : Reims
Pays : France métropolitaine
Études : IUT Reims-Châlons-Charleville

Je ne sais pas si ça peut solutionner ton problème mais j'avais écrit ce petit truc:
http://wiki.nekland.fr/index.php/Des_s [...] _avec_Symfony

J'avoue avoir un peu la flemme de lire tout le sujet.

Rejoignez nous sur le chat #siteduzero
J'aide ceux qui codent leurs scripts eux même, inutile de me demander de coder pour vous.
Liens utiles (ou pas): Mon wiki (Symfony2) | JqueryForm | Mon site | Minecraft
 
Hors ligne anonyme # Posté le 10/02/2012 à 16:46:42

le Router va inclure automatiquement le sous-domaine dans lequel il est quand il génèrera la route.
Hors ligne judas_le_philosophe # Posté le 12/02/2012 à 10:09:50

Citation : picowebo
le Router va inclure automatiquement le sous-domaine dans lequel il est quand il génèrera la route.


Oui c'est bien ça le problème, si tu es dans un sous-domaine, disons:

ville1.monsite.fr

et que tu veuilles proposer en lien les villes voisines:

ville2.monsite.fr et ville3.monsite.fr

Comment faire ça proprement ?
Édité le 12/02/2012 à 10:12:30 par judas_le_philosophe
Hors ligne anonyme # Posté le 12/02/2012 à 11:24:53

Proprement je dirais d'étendre l'UrlGenerator mais je n'ai jamais essayé donc il y a peut-être un autre moyen que je ne connais pas.

Maintenant, bien que cela peut-être ludique d'essayer d'étendre ce composant, il faudrait peser la charge du travail par rapport au gain productif de l'application.
Hors ligne Nek' # Posté le 12/02/2012 à 11:33:44
LPL FTW
Avatar

Ville : Reims
Pays : France métropolitaine
Études : IUT Reims-Châlons-Charleville

Vous avez lu mon message ? Parce qu'il répond plutôt bien.
Si vous voulez prendre le sous domaine comme paramètre il faudra plutôt se tourner vers apache et se demander comment on fait en PHP pur avant de passer à Sf.
Édité le 12/02/2012 à 11:35:19 par Nek'

Rejoignez nous sur le chat #siteduzero
J'aide ceux qui codent leurs scripts eux même, inutile de me demander de coder pour vous.
Liens utiles (ou pas): Mon wiki (Symfony2) | JqueryForm | Mon site | Minecraft
 
Connecté th3punish3r15 # Posté le 12/02/2012 à 11:44:11
Be cool

Citation : Nek'
Vous avez lu mon message ? Parce qu'il répond plutôt bien.
Si vous voulez prendre le sous domaine comme paramètre il faudra plutôt se tourner vers apache et se demander comment on fait en PHP pur avant de passer à Sf.

Salut,

Ta solution à l'air fonctionnelle (et relativement simple à mettre en place), mais bon, ça devient vite ingérable si tu as beaucoup de sous domaines.
Enfin c'est toujours bien de l'avoir en stock, ça peut toujours servir :D
Hors ligne judas_le_philosophe # Posté le 12/02/2012 à 12:25:57

Citation : Nek'
Vous avez lu mon message ? Parce qu'il répond plutôt bien.


Merci pour ta réponse, J'ai vu ta solution, c'est celle que je pensais utiliser au début: (cf 1er post et le lien)

http://www.developpez.net/forums/d1173 [...] ous-domaines/

Un problème me vient à l'esprit, comment gérer les différents caches avec ton système:

Prenons un exemple: dans le sous-dossier: (sous-domaine) "client":

J'ai dans le cache les entités de produits créées par mes clients.

Dans le sous-dossier: (sous-domaine) "site":

j'ai également en cache les entités de produits vues par les internautes.

Si un client supprime un produit de leur administration, le cache "client" sera mise à jour

Mais pas le cache du sous-domaine "site".....

As tu déjà été confronté à ce problème ?

Citation : nek
Si vous voulez prendre le sous domaine comme paramètre il faudra plutôt se tourner vers apache et se demander comment on fait en PHP pur avant de passer à Sf.


En php pur, couplé avec apache2 j'ai déjà la solution et l'implémentation:

http://forbach.twnsq.fr/

Citation

Proprement je dirais d'étendre l'UrlGenerator mais je n'ai jamais essayé donc il y a peut-être un autre moyen que je ne connais pas.

Maintenant, bien que cela peut-être ludique d'essayer d'étendre ce composant, il faudrait peser la charge du travail par rapport au gain productif de l'application.


Faudra que je fasse des tests, je n'ai pas encore d'idée concertant cette partie. C'est dommage que ça ne soit pas implementé dans le core de sf2
Édité le 12/02/2012 à 12:47:18 par judas_le_philosophe
Hors ligne Nek' # Posté le 12/02/2012 à 12:49:34
LPL FTW
Avatar

Ville : Reims
Pays : France métropolitaine
Études : IUT Reims-Châlons-Charleville

Je t'avouerai que j'ai pas trop testé le cache dans cette situation. Mais je ne pensais pas que le cache était dépendant de l'application courante non plus.

Donc c'est à tester.

@th3punish3r15 Dans le cadre d'une application Symfony on a rarement des centaines d'applications en sous domaine, en tous les cas ça serait bien moche !

[edit] Bon on est plutôt dans le cadre où on passe par apache. Bah ma foi j'ai pas la solution clé en main, désolé.
Édité le 12/02/2012 à 12:52:43 par Nek'

Rejoignez nous sur le chat #siteduzero
J'aide ceux qui codent leurs scripts eux même, inutile de me demander de coder pour vous.
Liens utiles (ou pas): Mon wiki (Symfony2) | JqueryForm | Mon site | Minecraft
 
Hors ligne judas_le_philosophe # Posté le 12/02/2012 à 13:06:58

Citation : Nek'
Je t'avouerai que j'ai pas trop testé le cache dans cette situation. Mais je ne pensais pas que le cache était dépendant de l'application courante non plus. Donc c'est à tester.


Dommage car sinon j'aurai utilisé ta solution.

Mais quand tu utilises ta solution et que tu dois vider le cache, tu executes bien un clear:cache dans tes deux sous-dossiers ?

genre:

php sous-domaine1/app/console cache:clear

php sous-domaine2/app/console cache:clear
Hors ligne Nek' # Posté le 12/02/2012 à 13:13:56
LPL FTW
Avatar

Ville : Reims
Pays : France métropolitaine
Études : IUT Reims-Châlons-Charleville

Oui, je suis con.

Mais il doit y avoir moyen de délocaliser le dossier de cache, et là c'est gagner, ça ne doit pas être compliqué.
Édité le 12/02/2012 à 13:14:06 par Nek'

Rejoignez nous sur le chat #siteduzero
J'aide ceux qui codent leurs scripts eux même, inutile de me demander de coder pour vous.
Liens utiles (ou pas): Mon wiki (Symfony2) | JqueryForm | Mon site | Minecraft
 
Hors ligne judas_le_philosophe # Posté le 12/02/2012 à 13:37:24

Citation : Nek'
Oui, je suis con.

Mais il doit y avoir moyen de délocaliser le dossier de cache, et là c'est gagner, ça ne doit pas être compliqué.


Peut être faut t'il seulement mettre dans tes sous-dossiers le dossier web.

Et combiner ta solution avec celle de picowebo, car de toute façon quoi qu'il arrive on a une configuration globale à l'application, et seulement quelques paramètres

qui changent pour les sous-applications
Connecté th3punish3r15 # Posté le 12/02/2012 à 14:05:55
Be cool

Citation : Nek'
@th3punish3r15 Dans le cadre d'une application Symfony on a rarement des centaines d'applications en sous domaine, en tous les cas ça serait bien moche !

Prends par exemple tous les [user].site.com, tous les sous domaines doivent être fait à la volée.
Pour les langues aussi : fr.site.com, en.site.com, etc. tu peux vouloir seulement faire du virtuel pour pouvoir avoir une url plus userfriendly (là encore, un débat peut s'ouvrir, mais ce n'est pas le sujet de ce topic).

Je vais tout de même suivre le topic, ta façon de faire peut m'intéresser aussi, c'est toujours bien d'avoir plusieurs alternatives.
Hors ligne judas_le_philosophe # Posté le 12/02/2012 à 15:14:09

Bon je viens d'essayer ta solution nek, en faite même en utilisant seulement le fichier web, ca colle pas car il y a le problème des assets également.

Il faudrait garder seulement les fichiers app.php et app_dev.php , je sais pas si finalement c'est très interessant !!!!!
Édité le 12/02/2012 à 15:15:38 par judas_le_philosophe
Hors ligne anonyme # Posté le 13/02/2012 à 09:56:24

Je viens de jeter un oeil à ce bundle :
https://github.com/BeSimple/BeSimpleI18nRoutingBundle

En regardant un peu comment ils ont fait, je pense qu'il y aurait moyen de partir dans la même optique pour répondre à tes besoins.

Je pense même que ce serait bien de bosser à plusieurs dessus, que penses-tu de créer un repo sur github ?
Hors ligne judas_le_philosophe # Posté le 13/02/2012 à 13:15:56

Citation : picowebo
Je viens de jeter un oeil à ce bundle :
https://github.com/BeSimple/BeSimpleI18nRoutingBundle

En regardant un peu comment ils ont fait, je pense qu'il y aurait moyen de partir dans la même optique pour répondre à tes besoins.

Je pense même que ce serait bien de bosser à plusieurs dessus, que penses-tu de créer un repo sur github ?


ça à l'air vraiment pas mal, je suis partant pour faire un github avec toi et peut être les personnes qui ont participé au sujet...
Hors ligne anonyme # Posté le 13/02/2012 à 13:19:59

ok je vais créer un repo, laissez vos noms d'utilisateur ici

moi c'est kwattro

edit:

https://github.com/sdzbundles/SDZSubdomainRoutingBundle
Hors ligne judas_le_philosophe # Posté le 13/02/2012 à 14:26:57

Voila j'ai forké le repo, mon pseudo: judas_le_philosophe

Retour au forum "PHP" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx