un petit batch pour symfony qui change la vie

Il y a quelques temps j’avais essayé d’automatiser un peu le processus de passage du MLD issu de DBDesigner vers l’implémentation SQL proprement dite dans symfony. Depuis j’ai découvert le plugin sfControlPanel et je me suis embourgeoisé …
plus question de taper une ligne de commande dans un terminal!
L’idée c’est toujours de

  • sauver le fichier xml généré par DBDesigner dans data/schema/db.xml
  • sauver le xsl qui permet la transformation sous data/schema/db2propel.xsl
  • et d’adapter le batch/convert_db.php comme suit<?php
<?php
define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
define('SF_APP',         'back');
define('SF_ENVIRONMENT', 'dev');
define('SF_DEBUG',       true);
require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');
$dbPath     = sfConfig::get('sf_data_dir').DIRECTORY_SEPARATOR."schema".DIRECTORY_SEPARATOR."db.xml";
$xslPath    = sfConfig::get('sf_data_dir').DIRECTORY_SEPARATOR."schema".DIRECTORY_SEPARATOR."dbd2propel.xsl";
$schemaPath = sfConfig::get('sf_config_dir').DIRECTORY_SEPARATOR."schema.xml";
$symfonyCmd = "symfony propel-convert-xml";
if (file_exists($dbPath))
{
$file = fopen($dbPath,"r");
$xmlstr="";
while (!feof($file))
{
$xmlstr.=fgets($file, 4096);
}
fclose($file);
$xml = new DomDocument; // from /ext/dom
$xml->loadXML($xmlstr);
$xsl = new DomDocument;
$xsl->load($xslPath);
$proc = new xsltprocessor;
$proc->importStyleSheet($xsl); // attach the xsl rules
$xmlstr = $proc->transformToXML($xml);
$file = fopen($schemaPath,"w");
fputs($file,$xmlstr);
fclose($file);
echo $schemaPath." has been successfully generated\n";
chdir(SF_ROOT_DIR);
if(system($symfonyCmd))
{
echo $schemaPath." has been successfully converted in YAML\n";
}
else
{
die("unable to convert ".$schemaPath." in YAML\n");
}
if (file_exists($schemaPath))
{
unlink($schemaPath);
echo $schemaPath." has been successfully deleted: you can build!\n";
}
else{
die($schemaPath." NOT FOUND\n");
}
}
else{
die($dbPath." NOT FOUND\n");
}

Fini le symfony propel-convert-xml et la suppression du schema.xml … une fois ce batch lancé on est paraît pour propel-build-all.
J’ajoute un autre batch dump_data.php qui permet de sauver le contenu de sa base de données en YAML.

<?php

define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
define('SF_APP',         'back');
define('SF_ENVIRONMENT', 'dev');
define('SF_DEBUG',       true);

require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');

// initialize database manager
$databaseManager = new sfDatabaseManager();
$databaseManager->initialize();
$data = new sfPropelData();
$data->dumpData(sfConfig::get('sf_data_dir').DIRECTORY_SEPARATOR.'fixtures/dump.yml');
?>

Si vous avez des soucis avec ce script, ou si vous ne voulez exporter qu’une partie des tables de votre BDD, n’hésitez pas à passer en second paramètre un tableau contenant le nom des objets à sauver (c’est à dire si vous avez une table « article » qui correspond à un objet « Article’, c’est « Article » qu’il faut mettre dans le tableau …).
Ensuite le grand classique (mentionné dans le tuto Askeet) à savoir load_data.php qui permet l’opération inverse (accessoirement il tentera d’importer tout ce qui se termine par « .yml » et qui se trouve dans le répertoire data/fixtures).

<?php

define('SF_ROOT_DIR',    realpath(dirname(__FILE__).'/..'));
define('SF_APP',         'back');
define('SF_ENVIRONMENT', 'dev');
define('SF_DEBUG',       true);

require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php');

// initialize database manager
$databaseManager = new sfDatabaseManager();
$databaseManager->initialize();
$data = new sfPropelData();
$data->loadData(sfConfig::get('sf_data_dir').DIRECTORY_SEPARATOR.'fixtures');
?>

Et sfControlPanel dans tout ça?
Dans la section task vous pouvez lancer ces trois scripts, ainsi que les commandes symfony uselles d’un simple clique …
Que du bonheur!

  • del.icio.us
  • Twitter
  • Facebook
  • Tumblr
  • FriendFeed
  • LinkedIn
  • MySpace
  • StumbleUpon
  • Digg
  • Google Bookmarks
  • MSN Reporter
  • Netvibes
  • Ping.fm
  • Wikio FR
  • Reddit
  • Scoopeo
  • Slashdot
  • email
  • PDF
  • Print

poster un commentaire

votre email ne sera jamais publié ou communiqué. les champs obligatoires sont marqués par une *

*
*