Entradas

Mostrando entradas de 2012

Proceso de creacion de CRUD en Symfony2

Proceso de desarrollo:

0- Eliminar contollers, toda la carpeta entity, toda la carpeta form, resource/routing, Resource/view/*

1- Diseño db en Mysql Workbench

2- Impactar sobre BD

3- php app/console doctrine:mapping:import PaqueteBundle annotation

Para generar una entidad: php app/console doctrine:mapping:import AdminBundle annotation --filter="Modulos"

4- php app/console doctrine:generate:entities PaqueteBundle

   php app/console doctrine:generate:entities MyCustomBundle:User
   php app/console doctrine:generate:entities MyCustomBundle/Entity/User

5- php app/console doctrine:generate:crud

Nota: si es una entidad user o role, hacer extend de clases 
Luego nos solicita si deseamos crear las opciones de escritura, le decimos “y” (sí), formato del CRUD: annotation, y finalmente en el Routes prefix colocamos /admin/role, este paso es importante porque a la ruta le asignamos el prefijo /admin para que nos permita empatar luego con el access_control, confirmamos y aparecerá el mensaje “…

Paquetes a instalar - MySQL - PHP - Apache - Centos

Cosas fundamentales para cuando se instala mysql php y apache por separado: MySQL (php-mysql) – A extension for PHP applications that use MySQL databases.PostgreSQL (php-pgsql) – A extension for PostgreSQL database for PHP.MongoDB (php-pecl-mongo) – A driver for MongoDB database.SQLite (php-sqlite) – Extension for SQLite Database Engine.Memcache (php-pecl-memcache) – Memcached caching daemon.Memcached (php-pecl-memcached) – Memcached caching daemon.GD (php-gd) – GD extension for PHP application to serve graphics.XML (php-xml) – XML Parser for PHP applications.MBString (php-mbstring) – Mbstring extension is used to handle multi-byte string in PHP applications. MCrypt (php-mcrypt) – A Mcrypt library for PHP scripts.APC (php-pecl-apc) – APC module used to optimize and cache PHP code.CLI (php-cli) – Command-line interface for PHP.PEAR (php-pear) – Application Repository framework for PHP.PDO (php-pdo) – Database access module for PHP applications.mcrypt - rpm -Uvh http://dl.fedoraproject.…

Instalación Symfony2 - Centos 6 - Problemas

En esta oportunidad voy a describir un problema que tuve al iniciar un nuevo proyecto en symfony2 sobre centos 6.

Problema 1:

Error con los host virtuales y permisos en el contexto de ejecución: Warning: DocumentRoot [/var/ ...] does not exist

Solución 1:

La manera en que descomprimimos symfony para ser usado. La manera correcta es hacerlo mediante la consola de la siguiente manera:

$ tar zxvf Symfony_Standard_Vendors_2.0.18.tgz
y luego

chown root:root symfony
Problema 2:

Otro problema que se presenta es, al momento de chekear si la instalacion de symfony2 es correcto, nos da:

php app/check.phpPHP Fatal error: Class 'DOMDocument' not found in /var/www/html/Symfony/vendor/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 214 Fatal error: Class 'DOMDocument' not found in /var/www/html/Symfony/vendor/symfony/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php on line 2
Solución 2:

yum -y install php-xml
Salvadora:

yum install…

Google Maps - Utilidades

Quitar el shadow de InfoWindow:

<style type="text/css"> #map_canvas { height: 100% } img[src*="iws3.png"] {display: none;} </style>
Redimensionar una imagen con librerias nativas de Google Maps:

var icon = new google.maps.MarkerImage("http://domain/path/image.png", null, null, null, new google.maps.Size(64, 64));
Pegar una estiqueta de tipo html sobre google maps en una posicion determinada o en asociada a un marker, se debe hacer uso de una librería label.js y asociarla al marker e la siguiente manera:

var label = new Label({ map: map }); label.bindTo('position', marker, 'position'); label.bindTo('text', marker, '$ '+recomendacion.precioFinal.toString()); marker.label = label;

Tomar valores pasados por GET JQuery Ajax - Symfony2

Problema:

Enviar por valores por post sin usar form de html

Solución:

Jquery

var p = {'origenNombre': origenNombre}; $.ajax( { url:"{{ path('aereo_load_extreme_search_t')}}", data: p, success: function(response){ setting(); initialize(response.data); } } );
Symfony 2

$request = $this->getRequest();      $request->get('origenNombre');

Ingeniería inversa - Symfony2

Algunos proyectos web obligan a utilizar una base de datos existente y que no se puede modificar. En estos casos no es necesario crear las entidades con las herramientas explicadas en las secciones anteriores. Lo mejor es crear las entidades directamente a partir de la base de datos mediante las herramientas de ingeniería inversa que incluye Symfony2.

En primer lugar, configura la información de acceso a la base de datos mediante el archivo app/ config/parameters.ini (o, si lo prefieres, en el archivo app/config/config.yml). Después, eje- cuta el siguiente comando para transformar la estructura completa de tablas de la base de datos en las clases PHP de las entidades:

$ php app/console doctrine:mapping:import OfertaBundle annotation Importing mapping information from "default" entity manager > writing .../OfertaBundle/Entity/Ciudad.php > writing .../OfertaBundle/Entity/Oferta.php > writing .../OfertaBundle/Entity/Tienda.php // ...
El primer argumento del comando es e…

Herramienta para manejo de cache propia

Herramienta para el diseño de Diagramas UML y otros

Data Centers - Google

Error 403 - Symfony2 - Centos Linux

Error:
403 Forbidden You don't have permission to access /app_dev.php/aereo/ on this server. Apache/2.2.15 (CentOS) Server at tije.test.local Port 80
Solución:
find /var/www/html -type d -exec chmod -R 775 {} \; find /var/www/html -type f -exec chmod -R 664 {} \;
Nota: generalmente esto se da en ambiente de producción, por cuestiones de actualización de vendors, no es aconsejable hacerlo en ambiente de testing y/o desarrollo.

Failed to write cache and log file - Linux - Symfony2

Es un problema que sucede cuando no tenemos seteados los permisos correspondientes a la carpeta cache de app.

Error:

Whoops, looks like something went wrong. 1/1 RuntimeException: Failed to write cache file "/var/www/html/tijedev/app/cache/dev/classes.php".
Solución:

Posicionarse sobre la carpeta app del proyecto y lanzar.

chmod 755 -R cache
Nota:

También puede suceder con los logs, por lo tanto se debe lanzar:

chmod -R 777 logs
La instalación de php sobre Centos no trae las librerias que soportan SOAP:

yum install php-soap

Cómo minimizar los js y css con YUI Compressor - Symfony2

1) Descargar el JAR de YUI Compressor y guárdalo en:

app/Resources/java/yuicompressor.jar
2) Se debe configurar dos filtros Assetic en tu aplicación, uno para minimizar los JavaScript con el compresor YUI y otro para minimizar hojas de estilo:

#app/config/config.yml assetic: filters: yui_css: jar: "%kernel.root_dir%/Resources/java/yuicompressor.jar" yui_js: jar: "%kernel.root_dir%/Resources/java/yuicompressor.jar"
3) Uso

{% javascripts ’@AcmeFooBundle/Resources/public/js/*’ filter=’yui_js’ %} {% endjavascripts %}{% stylesheets ’@AcmeFooBundle/Resources/public/css/*’ filter=’yui_css’ %} {% endstylesheets %}

Migración Proyecto Symfony2 Windows a Linux - Problemas

Error: Class 'DOMDocument' not found
Solución: yum install php-xml

Error: Whoops, looks like something went wrong.
Solución: date.timezone = America/Buenos_Aires

Multihost - Centos

Editar el archivo

gedit /etc/httpd/conf/httpd.conf
1) Descomentar

NameVirtualHost *:80

2) Crear virtual hosts

# Virtual host general. <VirtualHost *:80> DocumentRoot "/var/www/html" <Directory "/var/www/html"> allow from all Options +Indexes </Directory> </VirtualHost> #Desarrollo <VirtualHost *:80> DocumentRoot "/var/www/html/tijedev/web" #DirectoryIndex app.php ServerName tije.dev.local <Directory "/var/www/html/tijedev/web"> AllowOverride All Allow from All </Directory> </VirtualHost> #Testing <VirtualHost *:80> DocumentRoot "/var/www/html/tijetest/web" #DirectoryIndex app.php ServerName tije.test.local <Directory "/var/www/html/tijetest/web"> AllowOverride All Allow from All </Directory> </VirtualHost> Abrir el archivo /etc/hosts y agregar los NameVirtual:

127.0.0.1 tije.dev.local
127.0.0.1 tije.test.local

FileZilla - Centos

Instalación de Filezilla sobre Centos:

1. wget http://nchc.dl.sourceforge.net/project/filezilla/FileZilla_Client/3.5.3/FileZilla_3.5.3_i586-linux-gnu.tar.bz2

2. tar -jxvf FileZilla_3.5.3_i586-linux-gnu.tar.bz2

3. cd FileZilla3/bin

4. ./filezilla

Luego mover la carpeta Filezilla3 a /opt

Permisos - Centos

Este comando se aplica a archivos y carpetas, se puede usar -R para dar permisos recursivamente. El comando es:
chmod [opciones] XXX nomCarpeta/nomFichero
Donde:

[opciones]
-R permiso recursivo, se asigna el mismo permiso a carpetas y archivos hijos

XXX
0 = Ningún permiso (Lectura = 0 + Escritura = 0 + Ejecución = 0)
1 = Permiso de Ejecución (Lectura = 0 + Escritura = 0 + Ejecución = 1)
2 = Permiso de Escritura (Lectura = 0 + Escritura = 2 + Ejecución = 0)
3 = Permiso de Escritura y Ejecución (Lectura = 0, Escritura = 2, Ejecución = 1)
4 = Permiso de Lectura (Lectura = 4 + Escritura = 0 + Ejecución = 0)
5 = Permiso de Lectura y Ejecución (Lectura = 4 + Escritura = 0 + Ejecución = 1)
6 = Permiso de Lectura y Escritura (Lectura = 4 + Escritura = 2 + Ejecución = 0)
7 = Permiso de Lectura, Escritura y Ejecución (Lectura = 4 + Escritura = 2 + Ejecución = 1)

¿Entonces, que es, por ejemplo, chmod 644? 

Son los Permisos que tiene asignados cada Identidad, sobre un archivo o carpeta, según su R…

Puertos

PuertoDescripción1TCP Port Service Multiplexer (TCPMUX)5Remote Job Entry (RJE)7Protocolo Echo (Responde con eco a llamadas remotas)9Protocolo Discard (Elimina cualquier dato que recibe)13Daytime (Fecha y hora actuales)17Quote of the Day (Cita del Día)18Message Send Protocol (MSP)19Protocolo Chargen, Generador de caractéres20FTP — Datos21FTP — Control22SSH, scp, SFTP – Remote Login Protocol23Telnet25Simple Mail Transfer Protocol (SMTP)29MSG ICP37Time42Host Name Server (Nameserv)43WhoIs49Login Host Protocol (Login)53Domain Name System (DNS)66Oracle SQLNet67BOOTP (BootStrap Protocol) (Server), también usado por DHCP68BOOTP (BootStrap Protocol) (Client), también usado por DHCP69Trivial File Transfer Protocol (TFTP)70Gopher Services79Finger80HTTP88Agente de autenticación Kerberos103X.400 Standard107Remote Telnet Service108SNA Gateway Access Server109POP2110POP3115Simple File Transfer Protocol (SFTP)118SQL Services119Newsgroup (NNTP)123NTP137NetBIOS Name Service138NetBIOS Datagram Service13…

Montar unidad NTFS con Centos 6.2 - Linux

Arquitectura 32-bit: 
$ su   # rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt   # rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm   

Arquitectura a 64-bit:
$ su   # rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt   # rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm  

Luego de configurar los repositorios, se instalan los paquetes y sus dependencias:
# yum install fuse-ntfs-3g gnome-vfs2-ntfs   # hash  
Fuente: http://linux-bsd-sharing.blogspot.com.ar/2012/04/howto-enable-ntfs-read-and-write-access.html

Environment - Symfony2 - Xampp

#proyecto tije desarrollo <VirtualHost *:8080> DocumentRoot "C:/xampp/htdocs/proyectotije/web" DirectoryIndex app.php ServerName tije.dev.local <Directory "/htdocs/proyectotije/web"> AllowOverride All Allow from All </Directory> </VirtualHost> #proyecto tije testing <VirtualHost *:8088> DocumentRoot "C:/xampp/htdocs/tije/web" DirectoryIndex app.php ServerName tije.test.local <Directory "/htdocs/tije/web"> AllowOverride All Allow from All </Directory> </VirtualHost>

Dado 130912 devuelve Ej: Jue, 13 de Septiembre de 2012

public function dateText($date) { $dia = substr($date, 0, 2); $mes = substr($date, 2, 2); $anio = substr($date, 4, 2); $fecha = $dia . '/' . $mes . '/' . $anio; $dias = array('Dom', 'lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'); $meses = array('01' => 'Enero', '02' => 'Febrero', '03' => 'Marzo', '04' => 'Abril', '05' => 'Mayo', '06' => 'Junio', '07' => 'Julio', '08' => 'Agosto', '09' => 'Septiembre', '10' => 'Octubre', '11' => 'Noviembre', '12' => 'Diciembre'); $dd = explode('/', $fecha); $ts = mktime(0, 0, 0, $dd[1], $dd[0], $dd[2]); return $dias[date('w', $ts)] . ', ' . $dd[0] . ' de ' . $meses[date('m', $ts)] . ' de ' . date…

Funciones de fechas - PHP

Resta fechas y el devuelve el resultado en segundos:

$a = new DateTime('now'); $b = new DateTime('now+1'); $ats = $a->getTimestamp(); $bts = $b->getTimestamp(); $resta = $ats - $bts; //en segundos
Sumar meses a una fecha en un formato determinado:

$hoy = new \DateTime('now'); $hoy = (String) $hoy->format('dmy'); $hoy->add(new \DateInterval('P11M')); $onceMesesDespues = (String) $hoy->format('dmy');

Llamar un Controller dentro de otro - Symfony2

Muchas veces vamos a necesitar dividir el DefaultController.php en varios módulos independientes y mantenibles.

Suponemos que extraemos parte de DefaultController.php y creamos modulo1.php y modulo2.php. En estos momentos tenemos tres archivos.

- DefaultController.php
- Modulo1Controller.php
- Modulo2Controller.php

El problema llega al momento en que queremos acceder al siguiente objeto desde cualquier controller:

$em = $this->getDoctrine()->getEntityManager();

La solucion es setear el container apenas instanciamos los objetos:

$modulo1Controller = new Modulo1Controller.php(); $modulo1Controller->setContainer($this->container);
Esto permite por ejemplo, acceder a la la base de datos de distintos controladores.


Funciones de cadena - Twig

Concatenar cadenas: ~
Tomar parte de una cadena: ('ddmmaa') | slice(0, 2) resultado dd

Ciclar sobre array multidimensional en Twig

{% for key, section in sections %} {% endfor %}

Crear entidad a partir de una tabla en base de datos

Cómo generar entidades de una base de datos existente en Symfony2:
php app/console doctrine:mapping:convert yml ./src/Acme/BlogBundle/Resources/config/doctrine/metadata php app/console doctrine:mapping:import AcmeBlogBundle annotation php app/console doctrine:generate:entities AcmeBlogBundle
Si queremos crear el CRUD:

php app/console doctrine:generate:crud

Doctrine2 y Symfony2 - DQL

Alta de registro simple

$em = $this->getDoctrine()->getEntityManager(); $aereoReserva = new AereoReserva(); $aereoReserva->setCodigoAmadeus('asdf'); $aereoReserva->setCodigoAerolinea('asdfsadf'); $em->persist($aereoReserva); $em->flush();
Consulta simple con DQL
$em = $this->getDoctrine()->getEntityManager(); $query = $em->createQuery("SELECT CONCAT(a.aerolinea, CONCAT(' (', CONCAT(a.iata,')'))) AS label, a.iata AS value FROM AereoBundle:Aerolineas a WHERE a.aerolinea LIKE :aerolinea ")->setParameter('aerolinea', "%$searchterm%"); $entities = $query->getResult();

Error cannot import resource routing_dev yml

En la mayoría de los casos la solución es limpiar la cache:

php app/console cache:clear

Persistencia de Entidades vinculadas

Crear un registro de entidad asociada: addComment($myFirstComment); $em->persist($user); $em->persist($myFirstComment); $em->flush(); Eliminar en cascada: $user = $em->find('User', $deleteUserId); foreach ($user->getAuthoredComments() AS $comment) { $em->remove($comment); } $em->remove($user); $em->flush();

Crear entidad especial con annotation - Symfony2

namespace Cupon\OfertaBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** @ORM\Entity */ class Venta { ... /** * @ORM\Id * @ORM\ManyToOne(targetEntity="Cupon\OfertaBundle\Entity\Oferta") */ protected $oferta; /** * @ORM\Id * @ORM\ManyToOne(targetEntity="Cupon\UsuarioBundle\Entity\Usuario") */ protected $usuario; ... public function setOferta(\Cupon\OfertaBundle\Entity\Oferta $oferta) { $this-> oferta = $oferta; } ... }

Uniendo entidades con Join en Symfony2 en DQL

$em = $this->getDoctrine()->getEntityManager(); $consulta = $em->createQuery('SELECT o FROM OfertaBundle:Oferta o JOIN o.ciudad c WHERE c.slug = :ciudad AND o.fecha_publicacion = :fecha'); $consulta->setParameter('ciudad', 'barcelona'); $consulta->setParameter('fecha', '201X-XX-XX 00:00:00'); $oferta = $consulta->getResult();

Comandos importantes en Symfony2

Chequear instalacion de symofny2

Muestra requisitos faltantes para el correcto funcionamiento de symfony2:                        php app/check.phpComprobamos si symfony2 se instalo correctamente                                                             php app/consoleCrear Bundle


php app/console generate:bundle --namespace=proyectotije/AereoBundle --bundle-name=AereoBundle --dir=src/ --format=yml --structure=no --no-interaction
Publicar Bundle en web

 php app/console assets:install web

Crear entidades en Symfony2 usando consola


$ php app/console doctrine:generate:entity --entity="MiBundle:MiEntidad" --fields="nombre:string(100) apellidos:string(100) email:string(255) fecha_alta:datetime"
Luego de ejecutar éste comando tenemos el objeto de la entidad en symfony2, luego hay que plasmar el objeto físicamente en la Base de Datos.

Crear base de datos

 Una vez configurados los datos de acceso, ya puedes crear la base de datos vacía directamente con el siguiente comando de …