Archivo

Archivo para la Categoría "symfony"

$form['_csrf_token'] (sfWidgetFormInputHidden) required

10 noviembre 2010 Deja un comentario

Este problema con el token sucede cuando estamos mostrando un formulario con cada widget por separado.

La solución está en agregar en el formulario del template lo siguiente:

<?php echo $form['_csrf_token']->render(); ?>

De esta manera se soluciona lo del token.

Categorías:symfony Etiquetas:

Helpers con estilos

9 noviembre 2010 Deja un comentario

Cuando desarrollamos un sitio web, en la capa de la vista, donde se encuentran los templates, los layouts, etc. lo mas conveniente es que tengamos por un lado el código HTML y por otro los estilos CSS para la maquetación del mismo. Sin embargo a veces es necesario establecer algunas propiedades en las etiquetas HTML (por lo menos en mi caso). Por ejemplo si necesitamos agregar una imagen y rodearla con texto de manera que nos quede la imagen a la izquierda y el texto a la derecha, nuestro tag HTML podría tener las siguientes propiedades:

<img src=”imagenes/imagen.jpg” style=”margin-right: 10px; float: left;” />

Cuando comenzamos a hacer uso del framework Symfony para el desarrollo de nuestros sitios, es común que utilicemos la forma mencionada anteriormente, pero luego que nos informamos de que existen los helpers que nos facilitan el desarrollo, por ejemplo los helpers de formularios nos simplifican la tarea de tener que incluir etiquetas <? echo en medio de las etiquetas <input>, entre otras características.A lo que quiero llegar con todo esto es que se pueden aplicar propiedades de estilos a los helpers, de manera que se vean reflejados en los tags HTML.
Utilizando el ejemplo anterior el con algunos estilos css sería el siguiente:

<?php echo image_tag(‘images, array(‘style’=>’margin-right: 10px; float:left’ )); ?>

y su equivalente en HTML sería el siguiente:

<img src=”imagenes/imagen.jpg” style=”margin-right:10px; float:left;”/>

Si bien este tipo de cosas no son esenciales, pueden llegar a ser de utilidad en determinados momentos de desarrollo.

Categorías:symfony

i18n: Traducción de módulo de administración

1 noviembre 2010 Deja un comentario

Cuando creamos con symfony un modulo de administración, por defecto viene en ingles y necesitamos transformarlo en el idioma español para que los clientes puedan utilizarlo.
Para esto se debe realizar lo que se muestra a continuación:

1) Debemos agregar en el directorio app/backend/i18n dos archivos los cuales van a tener las traducciones. Ellos son messages.es_ES.xml y sf_admin.es.xml

messages.es_ES.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd"><xliff version="1.0">
<file source-language="EN" target-language="es_ES" datatype="plaintext" original="messages" date="2010-06-02T17:00:00Z" product-name="messages">
<header/>
<body>
<trans-unit id="username">
<source>Username</source>
<target>Usuario</target>
</trans-unit>
<trans-unit id="password">
<source>Password</source>
<target>Contraseña</target>
</trans-unit>
<trans-unit id="remember">
<source>Remember</source>
<target>Recordar</target>
</trans-unit>
<trans-unit id="signin">
<source>sign in</source>
<target>Entrar</target>
</trans-unit>
<trans-unit id="forgot_password">
<source>Forgot your password?</source>
<target>¿Olvidó su contraseña?</target>
</trans-unit>
<trans-unit id="permissions_required">
<source>You don't have the required permission to access this page.</source>       <target>No tiene los permisos requeridos para acceder a esta página.</target>
</trans-unit>
<trans-unit id="required">
<source>Required.</source>
<target>Requerido.</target>
</trans-unit>
<trans-unit id="invalid_credentials">
<source>The username and/or password is invalid.</source>
<target>El Nombre de Usuario o Password no son válidos.</target>
</trans-unit>
<trans-unit>
<source>Back to list</source>
<target>Regresar a la lista</target>
</trans-unit>
<trans-unit>
<source>Invalid.</source>
<target>Formato Inválido</target>
</trans-unit>
</body>
</file>
</xliff>

sf_admin.es.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd" ><xliff version="1.0">
<file original="global" source-language="en" datatype="plaintext">
<header />
<body>
<!-- Actions -->
<trans-unit>
<source>New</source>
<target>Nuevo</target>
</trans-unit>
<trans-unit>
<source>Edit</source>
<target>Editar</target>
</trans-unit>
<trans-unit>
<source>Delete
</source>
<target
>Eliminar
</target>
</trans-unit>
<trans-unit>
<source>List</source>
<target>Listar</target>
</trans-unit>
<trans-unit>
<source>Save</source>
<target>Guardar</target>
</trans-unit>
<trans-unit>
<source>Save and add</source>
<target>Guardar y agregar nuevo</target>
</trans-unit>
<trans-unit>
<source>Cancel</source>
<target>Cancelar</target>
</trans-unit>
<trans-unit>
<source>Choose an action</source>
<target>Seleccionar una acción</target>
</trans-unit>
<trans-unit>
<source>go</source>
<target>ok</target>
</trans-unit>
<trans-unit>
<source>Back to list</source>
<target>Regresar a la lista</target>
</trans-unit>
<!-- Filters -->
<trans-unit>
<source>Reset</source>
<target>Reestablecer</target>
</trans-unit>
<trans-unit>
<source>Filter</source>
<target>Filtrar</target>
</trans-unit>
<!-- List -->
<trans-unit>
<source>No result</source>
<target>Sin Resultado</target>
</trans-unit>
<trans-unit>
<source>Actions</source>
<target>Acciones</target>
</trans-unit>
<trans-unit>
<source>(page %%page%%/%%nb_pages%%)</source>
<target>(pagina %%page%%/%%nb_pages%%)</target>
</trans-unit>
<trans-unit>
<source>asc</source>
<target>asc</target>
</trans-unit>
<trans-unit>
<source>desc</source>
<target>desc</target>
</trans-unit>
<trans-unit>
<source>[0] no result|[1] 1 result|(1,+Inf] %1% results</source>
<target>[0] sin resultados|[1] 1 resultado|(1,+Inf] %1% resultados</target>
</trans-unit>
<!-- Pagination -->
<trans-unit>
<source>First page</source>
<target>Primera página</target>
</trans-unit>
<trans-unit>
<source>Previous page</source>
<target>Página anterior</target>
</trans-unit>
<trans-unit>
<source>Next page</source>
<target>Página siguiente</target>
</trans-unit>
<trans-unit>
<source>Last page</source>
<target>Ultima página</target>
</trans-unit>
<!-- Form -->
<trans-unit>
<source>The item was created successfully.</source>
<target>El elemento fue creado satisfactoriamente.</target>
</trans-unit>
<trans-unit>
<source>The item was updated successfully.</source>
<target>El elemento fue actualizado satisfactoriamente.</target>
</trans-unit>
<trans-unit>
<source>The item was created successfully. You can add another one below.</source>
<target>El elemento se ha creado correctamente. Puede agregar uno nuevo.</target>      </trans-unit>
<trans-unit>
<source>The item was updated successfully. You can add another one below.</source>        <target>El elemento se ha actualizado correctamente. Usted puede agregar otro abajo.</target>      </trans-unit>
<trans-unit>
<source>The item has not been saved due to some errors.</source>
<target>El elemento no se ha guardado debido a algunos errores.</target>      </trans-unit>
<trans-unit>
<source>The item was deleted successfully.</source>
<target>El elemento ha sido borrado.</target>
</trans-unit>
<trans-unit>
<source>You must at least select one item.</source>
<target>Debe seleccionar al menos un elemento.</target>
</trans-unit>
<trans-unit>
<source>You must select an action to execute on the selected items.</source>        <target>Debe seleccionar una acción a ejecutar para los elementos seleccionados.</target>      </trans-unit>
<trans-unit>
<source>A problem occurs when deleting the selected items as some items do not exist anymore.</source>
<target>Se produce un problema al borrar los elementos seleccionados ya que algunos artículos no existen más.</target>
</trans-unit>
<trans-unit>
<source>The selected items have been deleted successfully.</source>
<target>Los elementos seleccionados se han eliminado con éxito.</target>
</trans-unit>
<trans-unit>
<source>A problem occurs when deleting the selected items.</source>
<target>Se produce un problema al borrar los elementos seleccionados.</target>
</trans-unit>
<trans-unit>
<source>is empty</source>
<target>esta vacío</target>
</trans-unit>
<trans-unit>
<source>yes or no</source>
<target>si o no</target>
</trans-unit>
<trans-unit>
<source>yes</source>
<target>si</target>
</trans-unit>
<trans-unit>
<source>no</source>
<target>no</target>
</trans-unit>
<trans-unit>
<source><![CDATA[from %from_date% to %to_date%]]></source>
<target><![CDATA[de %from_date% a %to_date%]]></target>
</trans-unit>
<trans-unit>
<source><![CDATA[from %from_date%<br />to %to_date%]]></source>
<target><![CDATA[de %from_date%<br />a %to_date%]]></target>
</trans-unit>
</body>
</file>
</xliff>

2) Ahora debemos configurar el archivo settings.yml situado en app/backend/settings.yml para habilitar la traducción.
Habilitamos el i18n y establecemos la cultura por defecto en el idioma Español.

all:
.settings:
i18n: on
default_culture: es

Finalmente debemos guardar los cambios, limpiar la cache y borrar las cookies. No olvidarse de esto último que es muy importante.

Categorías:symfony

Call to undefined method BasePhoto::toArray

5 agosto 2010 Deja un comentario

Call to undefined method BasePhoto::toArray

El ORM que estoy usando es Propel y este error se generaba al intentar agregar o editar un registro, es decir al generarse una nueva instancia del form
$this->form = new UserForm();

Para resolver esto, hay que agregar las siguientes lineas en propel.ini y luego regenerar el modelo de clases
propel.addGenericAccessors = true
propel.addGenericMutators = true

Categorías:Propel, symfony

Paginación con sfDoctrinePager

17 junio 2010 8 comentarios

Codigo para el controlador

public function executeIndex(sfWebRequest $request)
{
//Creo una instancia de 'sfDoctrinePager' para la clase 'novedades', donde quiero mostrar 4 registros por página.
$this->pager = new sfDoctrinePager('novedades', 4);
$this->pager->setQuery(Doctrine::getTable('novedades')->createQuery('a'));
$this->pager->setPage($request->getParameter('page', 1));
$this->pager->init();
}

Luego en la vista, mostramos los registros recorriendo el paginador ‘$pager’

<?php foreach( $pager->getResults() as $row): ?>
<?php  echo “título:”.$elemento->getTitulo(); ?>
<?php endforeach; ?>

Y finalmente debajo mostramos los números de las paginas junto con las flechas.
Debes modificar donde dice ‘novedades/index’ por tu modulo y acción (modulo/acción)

<?php if ($pager->haveToPaginate()): ?>
<?php echo link_to('«', 'novedades/index?page='.$pager->getFirstPage()) ?>

<?php echo link_to(‘<’, ‘novedades/index?page=’.$pager->getPreviousPage()) ?>
<?php $links = $pager->getLinks();

foreach ($links as $page): ?>
<?php echo ($page == $pager->getPage()) ? $page : link_to($page, ‘novedades/index?page=’.$page) ?>
<?php if ($page != $pager->getCurrentMaxLink()): ?> –
<?php endforeach ?>
<?php echo link_to(‘>’, ‘novedades/index?page=’.$pager->getNextPage()) ?>
<?php echo link_to(‘»’, ‘novedades/index?page=’.$pager->getLastPage()) ?>
<?php endif ?>
<div class=”pagination_desc”>
<strong>getNbResults() ?> Registros de Novedades
<?php if ($pager->haveToPaginate()): ?>
- page <strong>getPage() ?>/getLastPage() ?>

Categorías:Doctrine, symfony

Frameworks en PHP ¿por qué usarlos?

6 junio 2010 Deja un comentario

Este video lo dice todo… “No hay que reinventar la rueda”. Pienso que es la mayor razón por la que se utiliza un framework.

Todos los dias los programadores nos encontramos con muchas cosas que debemos repetir en varios proyectos, por ejemplo el agregar-editar-eliminar registros de una base de datos. Por otro lado también debemos preocuparmos por la seguridad de nuestros proyectos, que no hayan agujeros de seguridad, que las URL no den a conocer la estructura de nuestro proyecto (.htaccess). También les puedo decir que hay cosas que son mas faciles de resolver, y hay cosas que ya estan resueltas,  lo que hace que con unas simple instrucciónes tengamos creado por ejemplo nuestro modelo de datos.

Segun comentarios de algunos programadores que tienen experiencia, el beneficio es mucho mayor si se invierte tiempo en un framework, aunque se pierda tiempo en aprender al principio, a la larga nos facilitará el trabajo.

Yo estoy empezando con symfony, y todavía tengo un largo camino por recorrer, pero me está siendo de utilidad.

Categorías:symfony

Configurar Netbeans para symfony

5 junio 2010 Deja un comentario

La utilización de la IDE de Netbeans para programar con el framework symfony facilita la programación en varios aspectos. En mi opinión el beneficio principal es que tenemos la ventana de comandos dentro de Netbeans.

Configurar la IDE de Netbeans para la creación de proyectos en php con symfony es muy sencillo.

El siguiente video explica como llevarlo a cabo:

Categorías:symfony

No database selected

4 junio 2010 Deja un comentario

Despues de crear un nuevo proyecto con symfony, el siguiente paso siempre fue configurar la base de datos mediante el comando configure:database. Lo hacía de la siguiente manera:
configure:database “mysql:bdname=NOMBREBD;host=localhost” root
Pero resulta que luego cuando quería generar el esquema mediante una base de datos existente, se generaba este error: No database selected.

Entonces intenté hacer a la inversa o sea creando el esquema para luego a partir de éste, generar el modelo, luego las sentencias sql, y luego volcar todo a una base de datos mediante el comando: “symfony doctrine:insert-sql”, y me aparecía el mismo error.

Luego probé instalando y probando con distintas versiones de xampp, pensando que el problema estaba en el servidor apache.

Hasta que finalmente logré resolver este problema configurando la base de datos de otra forma, la cual les mostraré a continuación.

Ésta es la otra alternativa para configurar la base de datos en symfony:
configure:database “mysql://root:@localhost/ejemploBD”
(suponiendo que la base de datos se llama “ejemploBD”, user: root, Pass: None).

Y eso es todo… yo todavía no entiendo bien razón por la cual no funciona de la otra manera. Si alguien sabe el motivo le agradecería si me lo explicara.
Saludos

Categorías:symfony

Error al crear un proyecto de symfony

3 junio 2010 Deja un comentario

PHP Warning: PHP Startup: Unable to load dynamic library ‘C:\xampp\php\ext\php_pgsql.dll’ – No se pudo iniciar la aplicación porque su configuración es incorrecta. Reinstalar la aplicación puede solucionar el problema.
in Unknown on line 0

Este error se generaba cada vez que quería crear un nuevo proyecto con symfony.

Para solucionarlo debemos buscar el archivo php.ini situado dentro del directorio de xampp/php, y dentro del mismo debemos buscar la librería php_pgsql.dll, y agregarle un ; (punto y coma) en el comienzo de la línea.

Con esto el problema se soluciona.

Espero que les sirva.

Categorías:symfony
Seguir

Get every new post delivered to your Inbox.