Modificando sfCrudGenerator.class.php y sfGenerator.class.php
Recientemente estuve trabajando en la modificación del generador crud (propel-generate-crud) de symfony para que me incluyera codificaciones propias. En el camino me encontré que el generador de symfony no agregaba las carpetas validate para incluir archivos validadores .yml, revisando un poco el código fuente de symfony, me topo con las clases sfCrudGenerator.class.php y sfGenerator.class.php, aunque estoy algo nuevo en esto, por descarte encontré que la clase sfCrudGenerator.class.php es la que se ejecuta cuando corremos el comando symfony propel-generate-crud desde nuestra consola, esta clase hereda los métodos de sfGenerator.class.php. Ahora bien ¿por que? explico todo esto.
La solución que para que symfony se me creara la carpeta validate y sus respectivos archivos, fue modificar ambas clases de la siguiente forma:
1.- En la clase sfGenerator.class.php en el método
generatePhpFiles($generatedModuleName, $templateFiles = array(), $configFiles = array()):
Debemos incluir $validateFiles = array() como parametro del métodos quedando de la siguiente forma
generatePhpFiles($generatedModuleName, $templateFiles = array(), $configFiles = array(), $validateFiles = array()).
Posteriormente agregamos las siguiente lineas antes de terminar el metodo:
// generate validate files
foreach ($validateFiles as $validate)
{
// eval validate file
$retval = $this->evalTemplate(’validate/’.$validate);
// save validate file
$this->getGeneratorManager()->getCache()->set($validate, $generatedModuleName.DIRECTORY_SEPARATOR.’validate’, $retval);
}
2.- Luego desde la clase sfCrudGenerator.class.php en el método generate($params = array()) le enviamos el parámetro para que tenga efecto lo agregado en la clase sfGenerator.class.php:
Agregamos
$validateFiles = sfFinder::type(’file’)->ignore_version_control()->name(’*.yml’)->relative()->in($themeDir.’/validate’);
Posteriormete modificamos la linea
$this->generatePhpFiles($this->generatedModuleName, $templateFiles, $configFiles);, quedando
$this->generatePhpFiles($this->generatedModuleName, $templateFiles, $configFiles, $validateFiles);
No se realmente si existe otra manera para que las carpetas validate se agreguen en el momento de generar el CRUD, pero realmente fue muy excitante navegar por los códigos de symfony y modificar su codificacion, por codificación esto lo hice en la versión 1.0.17 desconozco si ya fue incluido en las nuevas versiones.


















Facebook
Twitter
LinkedIn