Vous êtes sur la page 1sur 6

Anne Universitaire : 2014-2015

Workshops Framework Symfony2

Workshop n5

DCSRatingBundle : configuration et
intgration
Objectif
Le but de ce workshop est de configurer et utiliser le bundle DCSRating qui permet de :
-

Ajouter une barre de vote ne importe quelle page avec une seule ligne de code.
Lintgrer avec ne importe quel systme de gestion de l'utilisateur (par exemple
FOSUserBundle)
Dfinir des rles diffrents pour l'accs au vote.

Prs requis
Ce workshop est une suite du workshop FosUserBundle pour cela nous allons travailler sur le
projet crer dans le workshop FosUserBundle.

Installation
Tout dabord, ouvrir la fentre de commande et placez-vous dans la racine du projet. Et copier
la commande suivante :
php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
Une fois le fichier est rcupr, on lance le tlchargement du bundle depuis le terminal avec
la commande suivante :
php composer.phar require damianociarla/rating-bundle
Activer le bundle dans le noyau, en ajoutant ce bout de code dans le kernel :
new DCS\RatingBundle\DCSRatingBundle(),

Configuration
Placer ce code dans le fichier de configuration de votre projet : # app/config/config.yml

dcs_rating:
db_driver: orm
base_path_to_redirect: / # when the permalink is not configured
max_value: 5 # maximum value for the vote (stars displayed)
model:
rating: MyApp\UserBundle\Entity\Rating
vote: MyApp\UserBundle\Entity\Vote

Puis importez le routage du Bundle : # app/config/routing.yml


dcs_rating:
resource: "@DCSRatingBundle/Resources/config/routing.xml"
prefix: /

Ajout des entits Rating et Vote dans votre projet :


Entit Rating : # src/ MyApp/UserBundle/Entity/Rating.php

<?php
namespace MyApp\UserBundle\Entity;
use DCS\RatingBundle\Entity\Rating as BaseRating;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity

* @ORM\ChangeTrackingPolicy("DEFERRED_EXPLICIT")
*/
class Rating extends BaseRating
{
/**
* @ORM\Id
* @ORM\Column(type="string")
*/
protected $id;

/**
* @ORM\OneToMany(targetEntity=" MyApp\UserBundle\Entity\Vote", mappedBy="rating")
*/
protected $votes;
}

Entit Vote : # src/ MyApp/UserBundle/Entity/Vote.php

<?php

namespace MyApp\UserBundle\Entity;
use DCS\RatingBundle\Entity\Vote as BaseVote;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\ChangeTrackingPolicy("DEFERRED_EXPLICIT")
*/
class Vote extends BaseVote
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\ManyToOne(targetEntity=" MyApp\UserBundle\Entity\Rating", inversedBy="votes")
* @ORM\JoinColumn(name="rating_id", referencedColumnName="id")
*/
protected $rating;

/**
* @ORM\ManyToOne(targetEntity=" MyApp\UserBundle\Entity\Etudiant")
*/
protected $voter;
}

Correction du Bundle :
Avant de commencer la phase dintgration, nous devrons corriger quelques bugs dans le
bundle.
1- Faire les changements suivant dans VoteManager.php :
# vendor\damianociarla\rating-bundle\DCS\RatingBundle\Entity\VoteManager.php
use Symfony\Component\EventDispatcher\EventDispatcherInterface;

Dans le constructeur de la classe remplacez EventDispatcher par EventDispatcherInterface


EventDispatcherInterface $dispatcher

2- Faire les mmes changements dans RatingManager.php :


# vendor\damianociarla\rating-bundle\DCS\RatingBundle\Entity\RatingManager.php
3- Faire les mmes changements dans VoteManager.php :
# vendor\damianociarla\rating-bundle\DCS\RatingBundle\Model\VoteManager.php
4- Faire les mmes changements dans RatingManager.php :
# vendor\damianociarla\rating-bundle\DCS\RatingBundle\Model\ RatingManager.php

Intgration :
Importez la feuille de style du bundle en excutant la commande suivante :
php app/console assets:install
Puis inclure la feuille de style dans notre template :
#src\MyApp\UserBundle\Resources\views\layout.html.twig
<link rel="stylesheet" href="{{ asset('bundles/dcsrating/css/rating.css') }}" />

Maintenant nous pouvons afficher la note de chaque utilisateur par cette ligne de commande
{% include 'DCSRatingBundle:Rating:rating.html.twig' with {'id' : 'YOUR_UNIQUE_ID'} %}

Pour permettre le vote sur une page, vous pouvez utiliser ce code :
{% include 'DCSRatingBundle:Rating:control.html.twig' with {'id' : 'YOUR_UNIQUE_ID'} %}

Si vous avez besoin de changer le rle de l'utilisateur par dfaut pour une page spcifique,
ajoutez le paramtre de rle :
{% include 'DCSRatingBundle:Rating:control.html.twig' with {'id' : 'YOUR_UNIQUE_ID', 'role' : 'ROLE_USER'} %}

Si vous avez besoin de changer le permalink, ajouter le paramtre parmalink :


{% include 'DCSRatingBundle:Rating:control.html.twig' with {'id' : 'YOUR_UNIQUE_ID',
'permalink' : url('YOUR_ROUTE_ID')} %}

Remarque :
Vous devez changer le paramtre YOUR_UNIQUE_ID par lid de llment que vous voulez
lvaluer. Dans notre cas lID de lutilisateur.