Soutenez-nous

FAQ PHPConsultez toutes les FAQ

Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 29 juillet 2013 

 
OuvrirSommaireFrameworkssymfonyAdmin Generator

Il s'agit d'une partie de symfony qui cherche à simplifier les parties administratives de votre frontend en prenant en charge les pages CRUD (Create, Read, Update, Delete) pour un modèle de données spécifique. Pour avoir votre premier module ainsi généré, il vous suffit de taper une seule ligne de commande ! La voici d'ailleurs :

 
Sélectionnez
symfony doctrine:generate-admin application modèle

Où application est l'application à laquelle vous souhaitez ajouter votre module (généralement, backend) et modèle le nom du modèle pour lequel vous souhaitez créer la page.

Vous pouvez aussi spécifier le nom du module qui sera généré :

 
Sélectionnez
symfony doctrine:generate-admin --module=module application modèle

Ainsi que le thème, si vous ne souhaitez pas utiliser le thème par défaut (il vous faudra en installer un) :

 
Sélectionnez
symfony doctrine:generate-admin --theme=thème application modèle

D'autres options sont disponibles.

Cette commande générera un nouveau module, contenant quatre dossiers : actions, config, lib et templates. La configuration générale se fait dans le dossier config, fichier generator.yml. Ensuite, vous pouvez définir vos propres actions et actions de groupe, qu'il faudra introduire dans le fichier de configuration et implémenter dans le fichier d'actions. Finalement, tous les templates générés par le fichier de configuration peuvent être redéfinis très simplement, il suffit de mettre votre fichier dans ce dossier templates.

Lors du chargement du module, symfony en achève la préparation (création des actions, des templates, etc.) dans votre dossier temporaire. Vous pouvez aller regarder ces fichiers, ils vous apprendront plus vite que quiconque quel template est à redéfinir pour telle ou telle modification.

Créé le 8 mars 2011  par dourouc05

Le fichier de configuration du module dont vous souhaitez supprimer les actions est le seul à modifier (vous pouvez aussi redéfinir les templates mais cette méthode est moins propre et vous expose à divers risques lors de la mise à jour de symfony, en plus d'une surcharge de travail à la migration vers une version plus récente).

Il suffit d'y mettre ce code :

 
Sélectionnez
    config:
      list:
        object_actions: {}

au lieu de :

 
Sélectionnez
    config:
      list: ~

Si vous ne mettez pas les doubles accolades, symfony considérera que vous souhaitez conserver les paramètres par défaut (ce qu'indique le tilde ~).

Créé le 8 mars 2011  par dourouc05

Ici aussi, seul le fichier de configuration est à modifier :

 
Sélectionnez
    config:
      list:
        object_actions:
          do: { label: Do, action: do }

Ensuite, il vous faut implémenter l'action correspondant à ceci dans votre fichier d'actions :

 
Sélectionnez
	public function executeDo($request)
	{
		$q = Doctrine_Query::create()
			->from('table t')
			->where('t.id = ?', $request->getParameter('id'));
		$q = $q->fetchOne();
		
		$q->save();
		$this->redirect('module/index');
	}

Vous pouvez effectuer n'importe quelle action à cet endroit. Notez simplement que vous récupérez l'identifiant de l'élément sur lequel l'action a été demandée dans le paramètre id de la requête.

Créé le 8 mars 2011  par dourouc05

Deux solutions s'offrent à vous : une méthode rapide, claire et nette, la modification du fichier de configuration ; une méthode plus lente et plus hasardeuse, le remplacement des templates générés. Seule la première sera évidemment montrée.

Dans le fichier de configuration :

 
Sélectionnez
    config:
      list:
        batch_actions: {}
Créé le 8 mars 2011  par dourouc05

Il faut tout d'abord préciser au générateur que vous souhaitez ajouter une action de groupe supplémentaire :

 
Sélectionnez
    config:
      list:
        batch_actions:
          do: { label: Do, action: do }

Ensuite, il suffit de l'implémenter dans votre fichiers d'actions :

 
Sélectionnez
	public function executeBatchDo($request)
	{
		$q = Doctrine_Query::create()
		    ->from('table t')
		    ->whereIn('t.id', $request->getParameter('ids'));
		  
		foreach ($q->execute() as $p)
		{
			$p->save();
		}
		
		$this->redirect('module/index');
	}

Vous pouvez évidemment y faire ce que vous souhaitez, vous n'êtes même pas obligés de modifier les enregistrements. Vous en récupérerez toujours les identifiants dans le paramètre ids de la requête.

Créé le 8 mars 2011  par dourouc05
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Developpez.com Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.