Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/10/2011, 10h56   #1
Invité régulier
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 7
Points : 7
Par défaut Aide pour creation tache symfony

Bonjour à tous,

Comme l'indique le titre je sollicite votre aide pour la création d'une tâche symfony.

J'ai testé en ligne des commande la ligne suivante :
Code :
1
2
php symfony doctrine:dql "SELECT nom FROM agent WHERE photo_ok = ?" "false"|grep "nom:"|cut -f4 -d" " > /tmp/agentphoto.nok
cat /tmp/agentphoto.nok
et ca me créer bien un fichier avec le nom des personnes ayant l'attrbut photo_ok à false en bdd.

Grâce au lien suivant la création d'une tâche à été plutot simple :
http://www.symfony-project.org/cookbook/1_2/fr/tasks

Cependant j'ai mis mon code mais rien ne se passe la ligne de commande n'est pas exécutée.

Voici tout le code la tâche :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
 
class filtrePhotoTask extends sfBaseTask
{
	/**
     *
     * Cette tâche répertorie les personnes ne souhaitant pas voir leurs photos diffusées
     */
  protected function configure()
  {
    // // add your own arguments here
    // $this->addArguments(array(
    //   new sfCommandArgument('my_arg', sfCommandArgument::REQUIRED, 'My argument'),
    // ));
 
    $this->addOptions(array(
      new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'),
      new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
      new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'),
      // add your own options here
    ));
 
    $this->namespace        = 'aaa';
    $this->name             = 'filtrePhoto';
    $this->briefDescription = '';
    $this->detailedDescription = <<<EOF
The [filtrePhoto|INFO] task does things.
Call it with:
 
  [php symfony filtrePhoto|INFO]
EOF;
  }
 
  protected function execute($arguments = array(), $options = array())
  {
    // initialize the database connection
    $databaseManager = new sfDatabaseManager($this->configuration);
    $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
 
   $photo='php symfony doctrine:dql "SELECT nom FROM agent WHERE photo_ok = ?" "false"|grep "nom:"|cut -f4 -d" " > /tmp/agentphoto.nok';
 
  }
}
Puisque ça fonctionne bien en ligne de commande je ne comprends pas pourquoi dans une tâche...

Je vous avoue aussi que dans la fonction configure de la tâche

Code :
1
2
3
4
5
6
    $this->addOptions(array(
      new sfCommandOption('application', null, sfCommandOption::PARAMETER_REQUIRED, 'The application name'),
      new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
      new sfCommandOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'doctrine'),
      // add your own options here
    ));
J'ai laissé par défaut ne comprenant pas ce que ça "configure" exactement.
Par défaut ca me propose bien le bon nom de l'application, de l'environement et ça précise bien que c'est doctrine qui est utilisé.

En faite c'est plus tôt un problème des guillemets quand je vais un var dump de $photo, j'ai lettre pour lettre la requête écrite au lieu de son résultat. Du coup maintenant c'est un simple problème de guillemet.

En vous remerciant d'avance de vos réponses.
apprentiDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 11h20   #2
Membre à l'essai
 
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 21
Points : 21
Attention !

Je pense qu'il y a une incompréhension ici : une tâche symfony n'éxecute aucune ligne de commande shell (ne serait-ce que pour une question de compatibilité avec les systèmes Microsoft ...)

Une tâche symfony ne doit (dans l'absolu) contenir que du PHP.

Ici, il faudrait executer la requête avec Doctrine, récupérer et filter le résultat puis enfin créer le fichier, mais le tout en PHP.
Valockar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 15h17   #3
Invité régulier
 
Inscription : mai 2010
Messages : 24
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 24
Points : 7
Points : 7
Citation:
Je pense qu'il y a une incompréhension ici : une tâche symfony n'éxecute aucune ligne de commande shell (ne serait-ce que pour une question de compatibilité avec les systèmes Microsoft ...)
En effet j'avais compris que les tâches symfony permettaient d'exécuter des commandes shells...

Du coup dans la tâche symfony le code précédent à été remplacé par

Code :
1
2
3
4
5
6
7
8
9
$fichier= fopen('/tmp/employephoto.nok', "w+"); 
            $photo= Doctrine_Query::create()
   			->from('Employe')
			->where('photo_ok = ?', false);
	    $photo2 = $photo->fetchArray();
			      foreach ($photo2 as $nom)
			      {
			      	fwrite($fichier, $nom['matricule']."\n");
			      }
De plus en fessant comme cela je n'ai plus besoin du grep et cut car je sélectionne directement ce qu'il me faut dans la bdd.
Le fichier est bien créer, les infos sont écrites dans le fichier avec saut à la ligne c'est nickel. Merci
apprentiDev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h47.


 
 
 
 
Partenaires

Hébergement Web