lyssal / tourisme-bundle
Bundle pour applications touristiques
Installs: 50
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 3
Open Issues: 0
Type:symfony-bundle
Requires
Suggests
- egeloen/ckeditor-bundle: Pour afficher un éditeur graphique dans SonataAdmin
- lyssal/admin-bundle: Pour gérer LyssalTourismeBundle depuis la console administrative (basé sur SonataAdmin)
- sonata-project/admin-bundle: Pour gérer les entités depuis la console administrative
README
LyssalTourismeBundle
contient différents outils facilitant le développement d'applications touristiques.
Entités
Toutes les entités possèdent leur manager et leur gestion administrative (optionnelle) si vous utilisez Sonata
.
Les entités sont :
- Structure : Une structure précise comme le musée du Louvre, l'hôtel des flots bleus, etc
- StructureType : Un type de structure comme musée, zoo, gare ferroviaire, office de tourisme, etc
- StructureGroupe : Un groupe de structure comme Carrefour, Krys, Devred, etc
- Caracteristique : Une caractéristique de structure (Wifi, Accepte les animaux, etc)
- Structure\Hebergement : Champs spécifiques à un hébergement
- Structure\Restauration : Champs spécifiques à la restauration
Une structure peut appartenir à plusieurs types (par exemple hôtel et restaurant) mais ne peut appartenir qu'à un seul (ou aucun) groupe.
Repository
Vous devez définir le EntityRepository
de StructureLyssalBundle
comme repository par défaut (ou définir pour chaque entité héritée d'un bundle Lyssal le repositoryClass).
Reportez-vous à la documentation de StructureLyssalBundle
pour plus d'informations.
Utilisation
Vous devez créer un bundle héritant LyssalTourismeBundle
:
namespace Acme\TourismeBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class AcmeTourismeBundle extends Bundle { public function getParent() { return 'LyssalTourismeBundle'; } }
Ensuite, vous devez créer dans votre bundle les entités nécessaires héritant celles de LyssalTourismeBundle
.
Vous devez hériter à minima les entités ainsi :
namespace Acme\TourismeBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Lyssal\TourismeBundle\Entity\Structure as BaseStructure; /** * Structure. * * @ORM\Entity(repositoryClass="Lyssal\TourismeBundle\Repository\StructureRepository") * @ORM\Table(name="acme_structure", uniqueConstraints={@ORM\UniqueConstraint(name="SLUG_VILLE_UNIQUE", columns={"structure_slug", "ville_id"})}) */ class Structure extends BaseStructure { /** * @var \Acme\GeographieBundle\Entity\Ville * * @ORM\ManyToOne(targetEntity="Acme\GeographieBundle\Entity\Ville", inversedBy="structures", cascade={"persist"}) * @ORM\JoinColumn(name="ville_id", referencedColumnName="ville_id", nullable=false, onDelete="CASCADE") */ protected $ville; /** * @var \Acme\TourismeBundle\Entity\Structure\Hebergement * * @ORM\OneToOne(targetEntity="\Acme\TourismeBundle\Entity\Structure\Hebergement", inversedBy="structure", cascade="persist") * @ORM\JoinColumn(name="structure_hebergement_id", referencedColumnName="structure_hebergement_id", nullable=true, onDelete="CASCADE") */ protected $hebergement; /** * @var \Acme\TourismeBundle\Entity\Structure\Restauration * * @ORM\OneToOne(targetEntity="\Acme\TourismeBundle\Entity\Structure\Restauration", inversedBy="structure", cascade="persist") * @ORM\JoinColumn(name="structure_restauration_id", referencedColumnName="structure_restauration_id", nullable=true, onDelete="CASCADE") */ protected $restauration; }
namespace Acme\TourismeBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Lyssal\TourismeBundle\Entity\StructureGroupe as BaseStructureGroupe; /** * Groupe de structure. * * @ORM\Entity * @ORM\Table(name="acme_structure_groupe") */ class StructureGroupe extends BaseStructureGroupe { /** * array * * @ORM\OneToMany(targetEntity="\Acme\TourismeBundle\Entity\Structure", mappedBy="groupe", cascade={"persist"}) */ protected $structures; }
namespace Acme\TourismeBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Lyssal\TourismeBundle\Entity\StructureType as BaseStructureType; /** * Type de structure. * * @ORM\Entity * @ORM\Table(name="acme_structure_type") */ class StructureType extends BaseStructureType { /** * @ORM\ManyToMany(targetEntity="\Acme\TourismeBundle\Entity\Structure", mappedBy="types") */ protected $structures; }
namespace Acme\TourismeBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Lyssal\TourismeBundle\Entity\Caracteristique as BaseCaracteristique; /** * Caractéristique. * * @ORM\Entity() * @ORM\Table(name="acme_caracteristique") */ class Caracteristique extends BaseCaracteristique { }
namespace Acme\TourismeBundle\Entity\Structure; use Doctrine\ORM\Mapping as ORM; use Lyssal\TourismeBundle\Entity\Structure\Hebergement as BaseHebergement; /** * Structure\Hebergement. * * @ORM\Entity() * @ORM\Table(name="acme_structure_hebergement") */ class Hebergement extends BaseHebergement { /** * @var \Acme\TourismeBundle\Entity\Structure * * @ORM\OneToOne(targetEntity="\Acme\TourismeBundle\Entity\Structure", mappedBy="hebergement") */ protected $structure; }
namespace Acme\TourismeBundle\Entity\Structure; use Doctrine\ORM\Mapping as ORM; use Lyssal\TourismeBundle\Entity\Structure\Restauration as BaseRestauration; /** * Structure\Restauration. * * @ORM\Entity() * @ORM\Table(name="acme_structure_restauration") */ class Restauration extends BaseRestauration { /** * @var \Acme\TourismeBundle\Entity\Structure * * @ORM\OneToOne(targetEntity="\Acme\TourismeBundle\Entity\Structure", mappedBy="restauration") */ protected $structure; }
Vous devez ensuite redéfinir les paramètres d'entité (exemple sur Acme/GeographieBundle/Resources/config/services.xml
) :
<?xml version="1.0" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <parameters> <parameter key="lyssal.tourisme.entity.structure.class">Acme\TourismeBundle\Entity\Structure</parameter> <parameter key="lyssal.tourisme.entity.structure.hebergement.class">Acme\TourismeBundle\Entity\Structure\Hebergement</parameter> <parameter key="lyssal.tourisme.entity.structure.restauration.class">Acme\TourismeBundle\Entity\Structure\Restauration</parameter> <parameter key="lyssal.tourisme.entity.structure_groupe.class">Acme\TourismeBundle\Entity\StructureGroupe</parameter> <parameter key="lyssal.tourisme.entity.structure_type.class">Acme\TourismeBundle\Entity\StructureType</parameter> <parameter key="lyssal.tourisme.entity.caracteristique.class">Acme\TourismeBundle\Entity\Caracteristique</parameter> </parameters> </container>
Vous devez également mettre à jour l'entité Ville
de votre AcmeGeographieBundle
(qui étend LyssalGeographieBundle) :
namespace Acme\GeographieBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Lyssal\GeographieBundle\Entity\Ville as BaseVille; /** * Ville. * * @ORM\Entity * @ORM\Table(name="acme_ville") */ class Ville extends BaseVille { //... /** * array * * @ORM\OneToMany(targetEntity="\Acme\TourismeBundle\Entity\Structure", mappedBy="ville", cascade={"persist"}) */ private $structures; /** * Add structures * * @param \Acme\TourismeBundle\Entity\Structure $structures * @return Ville */ public function addStructure(\Acme\TourismeBundle\Entity\Structure $structures) { $this->structures[] = $structures; return $this; } /** * Remove structures * * @param \Acme\TourismeBundle\Entity\Structure $structures */ public function removeStructure(\Acme\TourismeBundle\Entity\Structure $structures) { $this->structures->removeElement($structures); } /** * Get structures * * @return \Doctrine\Common\Collections\Collection */ public function getStructures() { return $this->structures; } }
Managers
Les services sont :
lyssal.tourisme.manager.structure
lyssal.tourisme.manager.structure_groupe
lyssal.tourisme.manager.structure_type
lyssal.tourisme.manager.caracteristique
Exemple d'utilisation
Dans votre contrôleur :
$tousLesStructureGroupes = $this->container->get('lyssal.tourisme.manager.structure_groupe')->findAll();
Utiliser vos managers hérités de LyssalTourismeBundle
Si vous utilisez vos propres managers héritant des managers de LyssalTourismeBundle
, vous pouvez redéfinir les paramètres ainsi :
<parameters> <parameter key="lyssal.tourisme.manager.structure.class">Acme\TourismeBundle\Manager\StructureManager</parameter> <parameter key="lyssal.tourisme.manager.structure_groupe.class">Acme\TourismeBundle\Manager\StructureGroupeManager</parameter> <parameter key="lyssal.tourisme.manager.structure_type.class">Acme\TourismeBundle\Manager\StructureTypeManager</parameter> <parameter key="lyssal.tourisme.manager.caracteristique.class">Acme\TourismeBundle\Manager\CaracteristiqueManager</parameter> </parameters>
Vues
Certaines vues prédéfinies peuvent être incluses dans les vues de vos bundles.
Ville
Liste de villes :
{% include 'LyssalTourismeBundle:Ville/include:list.html.twig' with { 'villes':villes } %}
Ville d'une liste :
{% include 'LyssalTourismeBundle:Ville/include:list_element.html.twig' with { 'ville':ville } %}
Affichage d'une ville :
{% include 'LyssalTourismeBundle:Ville/include:view.html.twig' with { 'ville':ville } %}
Structure
Liste de structures :
{% include 'LyssalTourismeBundle:Structure/include:list.html.twig' with { 'structures':structures } %}
Structure d'une liste :
{% include 'LyssalTourismeBundle:Structure/include:list_element.html.twig' with { 'structure':structure } %}
SonataAdmin
Les entités seront automatiquement intégrées à SonataAdmin
si vous l'avez installé.
Si vous souhaitez redéfinir les classes Admin
, il suffit de surcharger les paramètres suivants :
lyssal.tourisme.admin.structure.class
lyssal.tourisme.admin.structure_groupe.class
lyssal.tourisme.admin.structure_type.class
lyssal.tourisme.admin.caracteristique.class
lyssal.tourisme.admin.structure.hebergement.class
lyssal.tourisme.admin.structure.restauration.class
Vous devriez également installer IvoryCKEditorBundle
pour avoir automatiquement un éditeur graphique aux champs attendant du HTML.
Alternativement, vous pouvez juste installer LyssalAdminBundle
.
Installation
LyssalTourismeBundle
utilise LyssalGeographieBundle
que vous devrez également installer et paramétrer.
LyssalTourismeBundle
utilise également StofDoctrineExtensions
que vous devrez paramétrer pour les traductions (gedmo_translatable
).
- Mettez à jour votre
composer.json
:
"require": { "lyssal/tourisme-bundle": "*" }
- Installez le bundle :
php composer.phar update
- Mettez à jour
AppKernel.php
:
new Lyssal\TourismeBundle\LyssalTourismeBundle(),
- Créez les tables en base de données :
php app/console doctrine:schema:update --force