Este blog esta destinado para la comunidad desarrolladora de software, en el podrán encontrar trucos, atajos o consejos de diferentes lenguajes de programación o frameworks, tanto de tipo desktop como web. Si quieres participar como editor por favor hacerlo saber escribiendo un correo a cualquiera de los editores.

sábado, 9 de octubre de 2010

¿Cómo deshabilitar la barra del Debug en Symfony?

Hola,

Me encuentro trabajando en mi proyecto de grado con Symfony versión 1.2.10, y lo hago en el modo _dev.php (desarrollo) y ExtJS 3.1.1

Resulta que al subir un archivo como se indica en este blog, el servidor me debe retornar un texto en formato JSON, que me indica en que estado terminó mi transacción.

Pues funciona bién esa parte, el problema es cuando termina de renderizar ese texto. En Extjs al momento de llamar el evento success del submit del formulario, me arrojaba el código fuente de la barra del Debug de symfony :-(

Para ello, entonces (gracias a un amigo Geyffer Acosta) me indicó que podía quitar esa barra. ¿Cómo?

sfConfig::set('sf_web_debug', false);

Quedando entonces así, las últimas líneas de mi acción:

sfConfig::set('sf_web_debug', false);
$this->renderText($salida);
return sfView::NONE;


Espero a alguien más le sirva este mini tip ;)

Nos vemos!!!


viernes, 8 de octubre de 2010

Symfony, Propel, Transactions

Para hacer transacciones en Propel:

$transaction = Propel::getConnection();

try
{
$transaction->beginTransaction();

// hago todo lo que tenga que hacer, guardar eliminar, consultar, etc, normalmente

$transaction->commit();
}
catch(Exception $exception)
{
$transaction->rollback();
}

espero les sirva

Extjs, Symfony, FileUploadField

Esta vez le toco a los archivos, subir archivos con extjs, para esto necesitamos los siguientes archivos que se encuentran en

extjs/examples/ux/fileuploadfield/FileUploadField.js

extjs/examples/ux/fileuploadfield/css/fileuploadfield.css

donde extjs es la versión que hallan descargado, bueno los incluimos en nuestro html

y aquí un ejemplo del js:

var subir_archivos_formpanel = new Ext.FormPanel({
title: 'Subir archivos',
width: 400,
height: 300,
frame: true,
fileUpload: true,
style: {"margin-left": "10px"},
bodyStyle: 'padding:5px',
defaults: { xtype: 'textfield', anchor:'100%'},
items:
[
{
xtype: 'fileuploadfield',
id: 'archivo',
emptyText: 'Seleccione un documento',
fieldLabel: 'Escojer',
name: 'archivo',
buttonText: '',
allowBlank:false,
buttonCfg: {iconCls: 'archivo'} /// imagen del boton de seeccionar el archivo
}
],
buttons:
[
{
text:'Enviar',
handler: subir_archivo
}
]
});

function subir_archivo(){
subir_archivos_formpanel.getForm().submit({
method: 'POST',
timeout: 60000, // porsi es muy grande el archivo y se demora mucho en subir
url: url_del_php_o_la_accion_del_symfony,
params: {}, // parametros extra
waitTitle: 'Enviando',
waitMsg: 'Enviando datos...',
success: function(response, action){
obj = Ext.util.JSON.decode(action.response.responseText);
// aqui lo que quiera hacer despues de enviado el archivo con exito
},
failure: function(form, action, response){
if (action.failureType == 'server') {
obj = Ext.util.JSON.decode(action.response.responseText);
// mensaje de error
// lo que quiera hacer cuando falle
}
}
});
}


y en el php:

public function executeSubirArchivo()
{
$salida ='';

try
{
$nombre = $_FILES['archivo']['name'];
$tamano = $_FILES['archivo']['size'];
$tipo = $_FILES['archivo']['type'];
$temporal = $_FILES['archivo']['tmp_name'];
if(file_exists($nombre_carpeta_donde_se_guardan_los_archivos."/".$nombre))
{
$salida = "({success: false, errors: { reason: 'Ya existe el archivo con el mismo nombre en la base de datos'}})";
}
else
{
if($tamano > 2100000) // 1000000 aprox 1mega
{
$salida = "({success: false, errors: { reason: 'El archivo excede el limite de tamano'}})";
}
else
{
$copio = copy($temporal, "uploads/".$nombre_carpeta_donde_se_guardan_los_archivos."/".$nombre);
if($copio){
// guardo la info en db como para mostrar en una grid nombre tamaño y esas cosas
$salida = "({success: true, mensaje:'El archivo subio exitosamente'})";
return $this->renderText($salida);
}
}
}
}
catch (Exception $excepcion)
{
$salida = "({success: false, errors: { reason: 'Hubo un error'}})";
}
return $this->renderText($salida);
}


no esta muy explicado pero creo que el código es muy legible, no probé el código que aquí esta publicado, lo tome de otro que implemento maryitsv

espero les sirva y si hay algún error no duden en hacerlo saber.