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, c

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 - rp

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.php PHP 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 inst

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 coman

Herramienta para manejo de cache propia

Varnish

Herramienta para el diseño de Diagramas UML y otros

UML Dia

Data Centers - Google

http://www.google.com/about/datacenters/

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 archiv

Puertos

Puerto Descripción 1 TCP Port Service Multiplexer (TCPMUX) 5 Remote Job Entry (RJE) 7 Protocolo Echo (Responde con eco a llamadas remotas) 9 Protocolo Discard (Elimina cualquier dato que recibe) 13 Daytime (Fecha y hora actuales) 17 Quote of the Day (Cita del Día) 18 Message Send Protocol (MSP) 19 Protocolo Chargen, Generador de caractéres 20 FTP — Datos 21 FTP — Control 22 SSH, scp, SFTP – Remote Login Protocol 23 Telnet 25 Simple Mail Transfer Protocol (SMTP) 29 MSG ICP 37 Time 42 Host Name Server (Nameserv) 43 WhoIs 49 Login Host Protocol (Login) 53 Domain Name System (DNS) 66 Oracle SQLNet 67 BOOTP (BootStrap Protocol) (Server), también usado por DHCP 68 BOOTP (BootStrap Protocol) (Client), también usado por DHCP 69 Trivial File Transfer Protocol (TFTP) 70 Gopher Services 79 Finger 80 HTTP 88 Agente de autenticación Kerberos 103 X.400 Standard 107 Remote Telnet

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.php Comprobamos si symfony2 se instalo correctamente                                                              php app/console Crear 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 dire