flosy.info | Développement Web, Open source …

TAG | Symfony2

Sous symfony2 permet de déployer un bundle à l’aide de Composer.
Voyons ensemble comment déployer nos propres bundles à l’aide de Composer.

Nous partons du principe que Composer est installé sur le serveur.

Fichier composer.json

Ce fichier doit être placé à la racine de notre bundle et il va contenir les différentes informations nécessaires à l’installation.
Les différentes propriétés qui le composent sont définies dans la documentation : http://getcomposer.org/doc/04-schema.md.

Voici un exemple :

{
    "name": "flosy/Demo-bundle",
    "description": "Demo Bundle",
    "type": "symfony-bundle",
    "license": "MIT",
    "authors": [
        {
            "name": "Flosy",
            "email": "contact@flosy.info",
            "homepage": "http://www.flosy.info",
            "role": "Developer"
        }
    ],
    "require": {
        "php": ">=5.3.8",
        "symfony/framework-bundle":         "~2.3",
        "twig/twig":                        "*",
        "doctrine/doctrine-bundle":         "*",
    },
    "autoload": {
        "psr-0": { "Flosy\\Bundle\\DemoBundle": "" }
    },
    "target-dir": "Flosy/Bundle/DemoBundle"
}

La propriété license n’est pas indiquée comme obligatoire mais pour soumettre notre bundle à Packagist elle sera requise.

Composer dispose de plusieurs commandes dont une qui permet de valider le fichier composer.json. En plus de valider les erreurs classiques JSON elle vous indiquera les propriétés recommandées pour publier sous forme de package.

  $ composer.phar validate src/Flosy/Bundle/DemoBundle/composer.json
  src/Flosy/Bundle/DemoBundle/composer.json is valid

Déclaration du package

Nous allons utiliser GitHub comme un dépôt pour notre Bundle puis nous le référencerons dans Packagist.

La déclaration d’un package pour Composer s’effectue par le biais du site packagist.org.
Pour référencer un bundle il vous faudra créer un compte ou passer par une authentification via GitHub.

Une fois connecté à Packagist il suffit de donner l’url du dépôt pour soumettre le package.

Une dernière étape optionnelle permet de mettre à jour automatiquement le package lors des mises à jour du dépôt GitHub.
Ceci s’effectue grâce au Service Hooks proposés par GitHub (menu Settings du dépôt GitHub).
Dans le cas du service Packagist il suffit de renseigner les champs suivants :

  • User avec le username présent dans le profile Packagist.
  • Token avec l’API token présent dans le profile Packagist.
  • Domain qui correspond au nom de notre bundle « flosy/demo-bundle » (défini dans le fichier composer.json).

Webographie

Article très complet http://www.idci-consulting.fr/creer-un-bundle-symfony2-reutilisable-et-le-diffuser-via-composer/.

La documentation http://getcomposer.org/doc/

Related Posts:

· ·

Symfony fournit un système d’ACL qui par défaut utilise un OU logique sur les droits. Voici un extrait du fichier security.yml :

security:
    access_control:
        - { path: ^/css/compile.*$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/js/compile.*$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user/is_authenticated, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/user, roles: [ROLE_ADMIN, ROLE_MANAGE_USER] }

Dans cette configuration par défaut l’utilisateur accède à /user s’il dispose du rôle ROLE_ADMIN ou ROLE_MANAGE_USER.

Ce fonctionnement ne correspond pas à celui attendu. Dans le projet nous souhaitons que l’utilisateur ait les 2 droits pour accéder à /usr.

Pour cela nous changeons la stratégie de décision d’accès :

security:
    access_decision_manager:
        # strategy can be: affirmative, unanimous or consensus
        strategy: unanimous

    access_control:
        - { path: ^/css/compile.*$, role: IS_AUTHENTICATED_ANONYMOUSLY }

Si vous souhaitez aller plus loin vous trouverez l’explication sur le fonctionnement de l’Access Decision Manager dans la documentation du composant (http://symfony.com/doc/master/components/security/authorization.html).

Related Posts:

· ·

Le but recherché est ici d’écrire une trace lors de la déconnexion de l’utilisateur.

L’une des solutions est de passer par un service qui sera appelé par le LogoutListener.

Souscription à l’évènement LogoutSuccess

Pour savoir comment gérer cela référons-nous à la documentation sur la configuration de la sécurité (http://symfony.com/doc/current/reference/configuration/security.html ).

Le firewall permet de préciser un service qui sera appelé en cas de succès de la déconnexion.


logout:
  path:   /logout
  target: /
  success_handler: flosy.user.logout.handler

Création du service

Il nous reste maintenant à créer ce service.
Pour cela créons le fichier LogoutHandler.php

< ?php
namespace Flosy\Bundle\UserBundle\Handler;
 
use Flosy\Bundle\CommonBundle\Model\EventLogManager;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
 
/**
 * Ce Handler permet de gérer des actions lors de la déconnexion de l'utilisateur.
 */
class LogoutHandler implements LogoutSuccessHandlerInterface {
 
    protected $elm;
 
    public function __construct(EventLogManager $elm)
    {
        $this->elm = $elm;
    }
 
    /**
     * Opération réalisées suite à la deconnexion.
     * 
     * @param \Symfony\Component\HttpFoundation\Request $request
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public function onLogoutSuccess(Request $request)
    {
        $this->elm->add('Log de deconnexion');
 
        $response = new RedirectResponse($request->headers->get('referer'));
        return $response;
    }
}

La classe doit implémenter l’interface LogoutSuccessHandlerInterface et plus particulièrement la méthode onLogoutSuccess qui sera appelée par le LogoutListener.
Pour l’écriture nous faisons appel à un autre service que nous ne détaillerons pas ici.

Déclaration du service

Il nous reste à déclarer le service.
Nous éditons pour cela le fichier services.xml de notre bundle.

< ?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">
 
    <services>
        <service id="flosy.user.logout.handler" class="Flosy\Bundle\UserBundle\Handler\LogoutHandler">
            <argument type="service" id="flosy.common.eventlog.manager"></argument>
        </service>
    </services>
</container>

Maintenant à chaque déconnexion un log sera écrit.

Webographie

L’article suivant traite de la gestion des redirections à la connexion et à la déconnexion à l’aide de ses services.

http://www.reecefowell.com/2011/10/26/redirecting-on-loginlogout-in-symfony2-using-loginhandlers/

Related Posts:

· ·

Mar/11

10

Lancement du site Symfony 2

Depuis quelques jours le nouveau site dédié à Symfony 2 est en ligne. Il comporte déjà une documentation très complète sur le sujet.
Pour ceux qui l’aurait raté voici la nouvelle url où trouver le projet http://symfony.com.

Related Posts:

Theme Design by devolux.nh2.me