Archivos mensuales: Sep PM

3 entradas

Integración Continua: la importancia de las pruebas automáticas

Imaginemos que somos mecánicos y tenemos un coche. Le estamos arreglando un faro, un faro que se ha roto o que alumbra poco o tiene un golpe. Ya tenemos la pieza de recambio, quitamos el faro antiguo y le ponemos el nuevo. Acto seguido ¿qué debemos hacer? ¿llamamos al dueño a que lo recoja directamente? Tenemos mucha prisa porque estamos reparando una cosa tras otra. Nos han hecho una llamada de última hora y no nos hemos dado cuenta de que no hemos hecho las conexiones correctamente. Llega el dueño, va a arrancar y revienta un fusible porque no hemos hecho las conexiones bien. Ahora es cuando se nos cae la cara de vergüenza porque ni siquiera hemos arrancado el coche a ver si funcionaba el nuevo faro.. En el desarrollo de software es de vital importancia hacer los programas rápidamente, entregarlos en el tiempo y forma, además de que deben funcionar bien. Estas prisas nos pueden jugar malas pasadas pero hay soluciones profesionales, formas de trabajo para controlar o evitar estos problemas. Pruebas unitarias y funcionales Esto que le ha pasado al mecánico con prisas es lo mismo que nos puede pasar si entregamos un programa sin haber hecho […]

Symfony: Doctrine: persistir datos bidireccionalmente en una relación ManyToMany

Este es un pequeño HOWTO para tener de referencia. Si tienes una relación entre dos entidades de la forma ManyToMany, una de ellas tendrá inversedBy y la otra mappedBy. Con un ejemplo se ve más claro. Suponiendo que has generado las acciones CRUD con el comando siguiente: $ php app/console doctrine:generate:crud  Supongamos que tenemos usuarios y negocios relacionados así, en una relación muchos a muchos. En la entidad Business tenemos:/** * @ORMManyToMany(targetEntity=”User”,  * inversedBy=”users”, cascade={“persist”}) */private $users; Y en la entidad User tenemos: /** * @ORMManyToMany(targetEntity=”Business”,  * mappedBy=”users”, cascade={“persist”}) * @ORMJoinColumn(onDelete=”SET NULL”) */private $businesses;Ahora el editar los usuarios tenemos en el formulario de edición de un usuario lo siguiente: ->add(‘businesses’, ‘entity’, array(    ‘by_reference’ => false,    //..))La entidad inversedBy, que en este caso es Business, guardará correctamente los Users referenciados al editarlos. Pero al contrario con la entidad Users, tiene los Business mapeados, lo que hará que no guarde automáticamente las referencias. Hay que añadir lo que he puesto en negrita en los códigos anteriores y en la entidad User lo siguiente para permitir que añada y borre los Business correctamente. /** * Add businesses. * * @param AppBundleEntityBusiness $businesses * * @return User */public function addBusiness(AppBundleEntityBusiness $business){    $this->businesses[] = $business;    $business->addUser($this);     return $this;} /** * Remove businesses. * * @param AppBundleEntityBusiness $businesses */public function removeBusiness(AppBundleEntityBusiness $business){    $this->businesses->removeElement($business);    […]

Sylius.org tienda online 100% Symfony: calidad, flexibilidad y escalabilidad

Brutal el proyecto que están desarrollando en Sylius. Navegando y navegando por proyectos para hacer tiendas online. Viendo las principales opciones del mercado: Magento, Prestashop y WordPress con WooCommerce. Me planteaba la opción de cómo sería desarrollar una tienda completa en Symfony. Integrar pasarelas de pago, métodos de envío, ordenando todo los productos por categorías, valores, atributos de los productos.. es un trabajazo. Pero por otro lado no quería prescindir de la flexibilidad y agilidad que nos da un buen framework PHP, en este caso el gran Symfony. Aterrizaje Todas estas búsquedas me llevaron a encontrar Sylius. Lo que hasta ahora es el proyecto de tienda online basado en Symfony que me ha parecido más interesante. A fecha en que escribo está en fase de desarrollo aunque hay quien ya lo está utilizando. Aquí el repositorio público de la aplicación web:https://github.com/Sylius/Sylius Página principal del proyecto:http://sylius.org/ Se trata de un proyecto Open Source, licenciado bajo la MIT license. Esto nos permite usar Sylius para cualquier proyecto, libremente sin coste de compra ninguno. Lo único que no se pude hacer es decir que Sylius lo hemos hecho nosotros, como es lógico. Se puede adaptar, modificar, ampliar, etc.. Cualquier cosa se puede hacer […]