LyssalGeographieBundle
LyssalGeographieBundle permet la manipulation de différentes données géographiques et des langues., (*1)
, (*2)
Entités
Toutes les entités possÚdent leur manager et leur gestion administrative (optionnelle) si vous utilisez Sonata., (*3)
Les entités sont :
* Pays
* Region
* Departement
* Ville
* CodePostal
* Langue, (*4)
Utilisation
Vous devez créer un bundle héritant LyssalGeographieBundle :, (*5)
namespace Acme\GeographieBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeGeographieBundle extends Bundle
{
public function getParent()
{
return 'LyssalGeographieBundle';
}
}
Ensuite, vous devez créer dans votre bundle les entités héritant celles de LyssalGeographieBundle et redéfinir certaines propriétés :, (*6)
namespace Acme\GeographieBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Lyssal\GeographieBundle\Entity\Pays as BasePays;
use Doctrine\ORM\Mapping\UniqueConstraint;
/**
* Pays du monde.
*
* @ORM\Entity()
* @ORM\Table
* (
* name="acme_pays",
* uniqueConstraints=
* {
* @UniqueConstraint(name="CODE_ALPHA_2", columns={ "pays_code_alpha_2" }),
* @UniqueConstraint(name="CODE_ALPHA_3", columns={ "pays_code_alpha_3" })
* }
* )
*/
class Pays extends BasePays
{
/**
* @var array<\Acme\GeographieBundle\Entity\Region>
*
* @ORM\OneToMany(targetEntity="Region", mappedBy="pays")
*/
protected $regions;
}
```php
namespace Acme\GeographieBundle\Entity;, (*7)
use Doctrine\ORM\Mapping as ORM;
use Lyssal\GeographieBundle\Entity\Region as BaseRegion;, (*8)
/**
* RĂ©gion d'un pays.
*
* @ORM\Entity()
* @ORM\Table(name="acme_region")
*/
class Region extends BaseRegion
{
/**
* @var \Acme\GeographieBundle\Entity\Pays
*
* @ORM\ManyToOne(targetEntity="Pays", inversedBy="regions")
* @ORM\JoinColumn(name="pays_id", referencedColumnName="pays_id", nullable=false, onDelete="CASCADE")
*/
protected $pays;, (*9)
/**
* @ORM\OneToMany(targetEntity="Departement", mappedBy="region")
*/
protected $departements;
}, (*10)
```php
namespace Acme\GeographieBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Lyssal\GeographieBundle\Entity\Departement as BaseDepartement;
use Doctrine\ORM\Mapping\UniqueConstraint;
/**
* Département d'une région.
*
* @ORM\Entity(repositoryClass="\Lyssal\GeographieBundle\Repository\DepartementRepository")
* @ORM\Table
* (
* name="acme_departement",
* uniqueConstraints=
* {
* @UniqueConstraint(name="REGION_CODE", columns={ "region_id", "departement_code" })
* }
* )
*/
class Departement extends BaseDepartement
{
/**
* @var \Acme\GeographieBundle\Entity\Region
*
* @ORM\ManyToOne(targetEntity="Region", inversedBy="departements")
* @ORM\JoinColumn(name="reg_id", referencedColumnName="reg_id", nullable=false, onDelete="CASCADE")
*/
protected $region;
/**
* @var array<\Acme\GeographieBundle\Entity\Ville>
*
* @ORM\OneToMany(targetEntity="Ville", mappedBy="departement")
*/
protected $villes;
}
```php
namespace Acme\GeographieBundle\Entity;, (*11)
use Doctrine\ORM\Mapping as ORM;
use Lyssal\GeographieBundle\Entity\Ville as BaseVille;, (*12)
/**
* Ville.
*
* @ORM\Entity()
* @ORM\Table(name="acme_ville")
*/
class Ville extends BaseVille
{
/**
* @var \Acme\GeographieBundle\Entity\Departement
*
* @ORM\ManyToOne(targetEntity="Departement", inversedBy="villes")
* @ORM\JoinColumn(name="dep_id", referencedColumnName="dep_id", nullable=false, onDelete="CASCADE")
*/
protected $departement;
}, (*13)
```php
namespace Acme\GeographieBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Lyssal\GeographieBundle\Entity\CodePostal as BaseCodePostal;
/**
* Code postal.
*
* @ORM\Entity()
* @ORM\Table(name="acme_code_postal", uniqueConstraints={@ORM\UniqueConstraint(name="UNIQUE_VILLE_CODE", columns={"ville_id", "code_postal_code"})})
*/
class CodePostal extends BaseCodePostal
{
}
```php
namespace Acme\GeographieBundle\Entity;, (*14)
use Lyssal\GeographieBundle\Entity\Langue as BaseLangue;
use Doctrine\ORM\Mapping as ORM;, (*15)
/**
* Langue.
*
* @ORM\Entity()
* @ORM\Table(name="acme_langue")
*/
class Langue extends BaseLangue
{, (*16)
}, (*17)
Vous devez ensuite redéfinir les paramÚtres suivants :
* `lyssal.geographie.entity.departement.class` : Acme\GeographieBundle\Entity\Departement
* `lyssal.geographie.entity.pays.class` : Acme\GeographieBundle\Entity\Pays
* `lyssal.geographie.entity.region.class` : Acme\GeographieBundle\Entity\Region
* `lyssal.geographie.entity.ville.class` : Acme\GeographieBundle\Entity\Ville
* `lyssal.geographie.entity.code_postal.class` : Acme\GeographieBundle\Entity\CodePostal
* `lyssal.geographie.entity.langue.class` : Acme\GeographieBundle\Entity\Langue
Exemple avec sur `Acme/GeographieBundle/Resources/config/services.xml` :
```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.geographie.entity.ville.class">Acme\GeographieBundle\Entity\Ville</parameter>
<parameter key="lyssal.geographie.entity.code_postal.class">Acme\GeographieBundle\Entity\CodePostal</parameter>
<parameter key="lyssal.geographie.entity.departement.class">Acme\GeographieBundle\Entity\Departement</parameter>
<parameter key="lyssal.geographie.entity.region.class">Acme\GeographieBundle\Entity\Region</parameter>
<parameter key="lyssal.geographie.entity.pays.class">Acme\GeographieBundle\Entity\Pays</parameter>
<parameter key="lyssal.geographie.entity.langue.class">Acme\GeographieBundle\Entity\Langue</parameter>
</parameters>
</container>
Vous devez paramétrer `` :, (*18)
Dans votre AppKernel.php
:, (*19)
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
Exemple dans votre config.yml
:, (*20)
doctrine:
# ...
orm:
# ...
mappings:
translatable:
type: annotation
alias: Gedmo
prefix: Gedmo\Translatable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
stof_doctrine_extensions:
default_locale: "%locale%"
orm:
default:
translatable: true
sluggable: true
Managers
Les services sont :
* lyssal.geographie.manager.departement
* lyssal.geographie.manager.pays
* lyssal.geographie.manager.region
* lyssal.geographie.manager.ville
* lyssal.geographie.manager.code_postal
* lyssal.geographie.manager.langue, (*21)
Exemple d'utilisation
Dans votre contrĂŽleur :, (*22)
$tousLesPays = $this->container->get('lyssal.geographie.manager.pays')->findAll();
Utiliser vos managers hérités de LyssalGeographieBundle
Si vous utilisez vos propres managers héritant des managers de LyssalGeographieBundle, vous pouvez redéfinir les paramÚtres suivants :
* lyssal.geographie.manager.departement.class
* lyssal.geographie.manager.pays.class
* lyssal.geographie.manager.region.class
* lyssal.geographie.manager.ville.class
* lyssal.geographie.manager.code_postal.class
* lyssal.geographie.manager.langue.class
, (*23)
Exemple en XML d'un manager personnalisé :, (*24)
<parameters>
<parameter key="lyssal.geographie.manager.departement.class">Acme\GeographieBundle\Manager\DepartementManager</parameter>
</parameters>
SonataAdmin
Les entités seront automatiquement intégrées à SonataAdmin si vous l'avez installé., (*25)
Si vous souhaitez redéfinir les classes Admin, il suffit de surcharger les paramÚtres suivants :
* lyssal.geographie.admin.departement.class
* lyssal.geographie.admin.pays.class
* lyssal.geographie.admin.region.class
* lyssal.geographie.admin.ville.class
* lyssal.geographie.admin.code_postal.class
* lyssal.geographie.admin.langue.class
, (*26)
Installation
LyssalTourismeBundle utilise StofDoctrineExtensions
que vous devrez paramétrer pour les traductions (gedmo_translatable
)., (*27)
- Mettez Ă jour votre
composer.json
:
"require": {
"lyssal/geographie-bundle": "*"
}
- Installez le bundle :
php composer.phar update
- Mettez Ă jour
AppKernel.php
:
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
new Lyssal\StructureBundle\LyssalStructureBundle(),
new Lyssal\GeographieBundle\LyssalGeographieBundle(),
new Acme\GeographieBundle\AcmeGeographieBundle(),
- Mettez Ă jour votre
config.yml
:
doctrine:
orm:
auto_mapping: true
mappings:
translatable:
type: annotation
alias: Gedmo
prefix: Gedmo\Translatable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
stof_doctrine_extensions:
default_locale: "%locale%"
orm:
default:
translatable: true
sluggable: true
- Créez les tables en base de données :
php app/console doctrine:schema:update --force
Commandes
Importer des données
Vide et importe des données :, (*28)
php app/console lyssal:geographie:database:import
Attention : Les tables seront automatiquement vidées lors de l'appel de cette commande., (*29)
Le remplissage de la base concerne :, (*30)
- Tous les pays avec nom en français et anglais
- Les régions de France avec nom en français
- Les départements de France avec nom en français
- Les villes de France avec nom en français et codes postaux
CSV
Pour remplir la base de données, LyssalGeographieBundle
utilise les CSV de sql.sh pour les pays, les départements et les villes., (*31)
Ce(tte) oeuvre de http://sql.sh est mise Ă disposition selon les termes de la licence Creative Commons Attribution â Partage dans les MĂȘmes Conditions 4.0 International(http://creativecommons.org/licenses/by-sa/4.0/)., (*32)