• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Symfony parte 6
 

Symfony parte 6

on

  • 1,713 views

Estudios de códigos de programación, modelos de datos, controlador y adentrándonos a los formularios.

Estudios de códigos de programación, modelos de datos, controlador y adentrándonos a los formularios.

Statistics

Views

Total Views
1,713
Views on SlideShare
1,700
Embed Views
13

Actions

Likes
0
Downloads
3
Comments
0

4 Embeds 13

http://www.slideshare.net 5
http://gestion.poodu.cl 4
http://static.slidesharecdn.com 3
http://www.health.medicbd.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • En algunos casos, la clave primaria está formada por más de una columna. Es esos casos, el método retrieveByPK() permite indicar varios parámetros, uno para cada columna de la clave Primaria.
  • En algunos casos, la clave primaria está formada por más de una columna. Es esos casos, el método retrieveByPK() permite indicar varios parámetros, uno para cada columna de la clave Primaria.
  • Se le agrega una s al final de getComentario()
  • Para hacer el comportamiento similar a la función include_partial es uno de los pocos helpero que no necesitan como predecesor el echo para imprimir.
  • - Eliminar los campos de un formulario, elimina todos sus widgets como sus validadores.
  • La ventaja es que si el usuario recarga la página resultante, el formulario no será enviado nuevamente.
  • La ventaja es que si el usuario recarga la página resultante, el formulario no será enviado nuevamente.
  • La ventaja es que si el usuario recarga la página resultante, el formulario no será enviado nuevamente.
  • La ventaja es que si el usuario recarga la página resultante, el formulario no será enviado nuevamente.

Symfony parte 6 Symfony parte 6 Presentation Transcript

  • Symfony Parte 6 Rodrigo Miranda [email_address] [email_address] http://www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Veremos un ejemplo de Symfony:
    • Para ejemplificar los contenidos que revisaremos en esta presentación, estudiaremos algunos códigos de ejemplos desarrollados por la comunidad o la empresa Sensio (empresa que mantiene el Framework).
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Sistema Enrutamiento
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Redireccionando el Home de la Aplicación
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl La clase sfRoute
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • La clase sfRoute:
    • Todas las rutas definidas en el archivo routing.yml del subdirectorio config/ de cada aplicación, se convierten internamentes en objetos de la clase en cuestión. Si se desea utilizar otra clase, se debe indicar dicho nombre en la opción class de la definición de la ruta.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl La clase para rutas basadas en Objetos
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Enrutamiento en Acciones y en Plantillas
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Recordar que los helpers anteriores se trabajan de esa manera porque en el routing.yml no estamos utilizando sfRoute sino que la clase sfPropelRoute, por lo mismo enviamos desde los helpers objetos.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Clase para colecciones de Rutas.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Una vez que personalizamos la ruta de la acción show del módulo job, nos podemos percatar que el restos de los métodos como (index, new, edit, create, update y delete) seguirán utilizando la ruta por default.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Para especificar una ruta del tipo sfPropelRoute para cada una de ellas, de la misma forma como se hizo con la acción show, utilizaremos la clase sfPropelRouteCollection . Por lo tanto el archivo routing.yml de la aplicación quedaría de la siguiente manera:
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Profundizando en el Modelo
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • A cceso a los datos:
    • En Symfony el acceso a los datos se realiza mediante objetos. Por lo mismo, para asegurarnos que se utiliza el mismo lenguaje debemos realizar una relación de conceptos.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Relación de Conceptos :
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Ejemplo :
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Obtención de registros mediante clave primaria
    • Si se conoce la clave primaria de un registro concreto, se puede utilizar el siguiente método de la clase Peer para obtener el objeto relacionado.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Obtener un arreglo de objetos de la clase Articulo.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Obtener arreglo de los comentarios relacionados
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl De los registros hijos deseo obtener su padre
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Objeto Criteria de Propel
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Criteria es la clase que utilizaremos para definir consultas simples sin utilizar SQL, para conseguir la abstracción de base de datos. Un objeto Criteria vacío devuelve todos los objetos de la clase Peer que utiliza el método doSelect.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • El método doSelect() toma como argumento un objeto de tipo Criteria que describe la consulta que se va a realizar a la base de datos .
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Si quisieramos añadir a esa consulta algún filtro para obtener registros más específicos en SQL, tendríamos que utilizar una sentencia WHERE.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • En la clase Criteria el método add() añade una condición WHERE a la sentencia generada. De esta forma podemos limitar los resultados que se obtienen.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Guardar datos :
    • No se guarda ni modifica un objeto hasta que invoquemos de manera explícita el método save() del objeto con el cual trabajamos.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Borrar datos :
    • No se borra un objeto hasta que invoquemos de manera explícita el método delete() del objeto con el cual trabajamos.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Depurando el código SQL generado
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • En Symfony no escribes las sentencias SQL a mano, ya que utilizas objetos lo que le permite a Propel tener en cuenta las diferencias entre los gestores de base de datos para generar sentencias SQL optimizadas.
    • Ademas, Propel le aplica un mecanismo de escape a los datos que utilizas para hacer comparaciones en las consultas a la base de datos, lo que reduce la posibilidad de sufrir ataques SQL injection.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Serializando Objetos
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Para modificar un objeto Propel o realizar una acción en conjunto antes de que se guarde en la base de datos, se debe redefinir el método save() de la clase del Modelo .
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • El método isNew() devuelve true cuando el objeto no se ha guardado todavía en la base de datos y false en cualquier otro caso .
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Personalizando la Configuración
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Datos como opción de configuración :
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Refactorización
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Elementos Parciales
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Un elemento parcial es un trozo de código de plantilla que se puede reutilizar.
    • Al igual que las plantillas, los elementos parciales son archivos que se encuentran en el directorio templates/ .
    • El nombre de un elemento parcial comienza con un guión bajo (_)
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Los elementos parciales se incluyen mediante el helper include_partial (), al que se le pasa como parámetro el nombre del módulo y el nombre del elemento parcial.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Como los elementos parciales se pueden llamar desde cualquier punto de la aplicación (ejemplo: acción o templates) no tienen acceso automático a las variables definidas por la acción.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Formularios
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl lib/form
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Listado de Widgets para campos de Formularios
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Formularios de Propel
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Métodos de Acciones
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Obteniendo parámetros en el controlador (método de una acción)
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Terminación de las Acciones
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Estas dos finalizaciones son similares, ya que sfView::SUCCESS es el comportamiento por defecto.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • También podemos llamar una vista de error con:
    • El template de resultado sería:
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Cuando no se requiere utilizar ninguna vista:
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Si el resultado debe ser mostrado por una plantilla específica, se debe prescindir de la sentencia return y se debe utilizar el método setTemplate() en su lugar.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Si la acción pasa la llamada hacia otra acción (forward), realiza una llamada interna, transparente al usuario, manteniendo la URL de la petición:
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Si deseamos realizar un cambio en la petición y en la URL resultante utilizamos.
    • Si la acción es llamada desde un formulario con method=‘post’ deberías siempre realizar un redirect.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Tanto forward como redirect lanzan una excepción sfStopException para detener la ejecución de la acción, impidiendo que se ejecuta el código que está más abajo.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Dado que la mayoría de las veces una acción hace un redirect o forward después de realizar alguna comprobación existen los sgtes métodos.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
    • Si el método termina en xxx If() y la condición es verdadera se ejecuta.
    • Si el método términa en xxx Unless() y la condición es false se ejecuta.
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl
  • Rodrigo Miranda Blog: www.rodrigomiranda.cl Preguntas?