Blackslot blog

Etiquetados como ‘php symfony’

Un vistazo a Doctrine 2

Escrito por admin el 02-05-2010

Doctrine es un ORM que cada vez estamos usando más los que trabajamos con el framework Symfony para php.

La nueva versión de Doctrine está reescrito en php5.3, mejorando su rendimiento de una forma notable y haciendo mucho más ágil su uso.

Jonathan Wage, impartió en Febrero de este año durante la conferencia Symfony Live 2010 una interesante charla presentando algunas de las novedades más interesantes que se recogen en esta nueva versión.

1 comentario | Archivado como Desarrollo web | 02/05/2010

Swift Mailer es probablemente la mejor librería para enviar correos mediante smtp y sendmail que existe para php. Escrita por Fabien Potencier, CEO de Sensio Labs y Lead developer del framework Symfony para php.

El siguiente código nos permite enviar correo usando el servidor smtp de gmail con esta herramienta:


 $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com',
                                               465,
                                               'ssl')
              ->setUsername('usuario@gmail.com')
              ->setPassword('tu contraseña');

 //Creamos el mailer pasándole el transport con la configuración de gmail
 $mailer = Swift_Mailer::newInstance($transport);

 //Creamos el mensaje
 $message = Swift_Message::newInstance($subject)
             ->setFrom(array('tuemail@blackslot.gov' => 'Blackslot'))
             ->setTo($to_addresses)
             ->setBody($body);

 //Enviamos
 $result = $mailer->send($message);

2 comentarios | Archivado como Desarrollo web | 04/01/2010

Los desarrolladores familiarizados con symfony conocen la clase sfWidgetFormChoice que nos permite crear un campo html seleccionable (tipo select, radio, checkbox y list) de una forma muy cómoda:

class ComprarForm extends sfForm{

  private $opciones = false;

  //configuramos el widget con sus opciones en la clase formulario
  public function configure()
  {

     $this->opciones  = array('manzanas',
                              'peras',
                              'limones');

     $this->setWidgets(array(
                              'quiero'   => new sfWidgetFormChoice(
                                              array('expanded' => true,
                                                    'choices'  => $this->opciones)),
                       ));

     $this->setValidators( array( 'quiero' => new sfValidatorChoice(
                                              array( 'required' => true,
                                                     'choices'=> array_keys($this->opciones)
                                                   )),
                         ));
  }

}

//en la acción creamos el formulario
  $this->formulario = new ComprarForm();

//y en la vista generamos el campo tipo <select> con las opciones configuradas
  $formulario['quiero']->render();

Hoy me he encontrado con la necesidad de tener que crear diferentes opciones segun la petición que llegue a la acción que muestra el formulario. Quizá me interese que en lugar de que mi select se rellene con frutas como en el ejemplo anterior, se rellene con todo tipo de utensilios para matar zombies, por ejemplo.

Para conseguir esto podríamos crear otra clase de formulario que contenga un widget con esas opciones y sus respectivos validadores, pero eso rompería totalmente la regla de oro en el desarrollo web ágil: “Don’t repeat yourself“.

La solución más elegante es sobreescribir el constructor de nuestra clase ComprarForm, de tal forma que se especialice con respecto al de su padre sfForm para admitir un parámetro extra llamado “tipoDeProducto”.

class ComprarForm extends sfForm{

  private $opciones = false;

  public function __construct($tipoDeProducto='frutas',
                              $defaults = array(),
                              $options = array(),
                              $CSRFSecret = null){

      switch($tipoDeProducto){
        case 'frutas':
          $this->opciones  = array('manzanas',
                                   'peras',
                                   'limones');
        break;
        case 'armas':
          $this->opciones  = array('sierra eléctrica',
                                   'recortada',
                                   'katana',
                                   'rifle de francotirador');
        break;
      }

      parent::__construct($defaults, $options, $CSRFSecret);

 }

 //configuramos el widget con sus opciones en la clase formulario
 public function configure()
 {

     $this->setWidgets(array(
                              'quiero'   => new sfWidgetFormChoice(
                                                   array('expanded' => true,
                                                         'choices'  => $this->opciones)),
                      ));

    $this->setValidators(array(
                              'quiero' => new sfValidatorChoice(
                                               array('required' => true,
                                                     'choices'=> array_keys($this->opciones)
                                                    )),
                         ));
 }

}

Ahora ya tenemos todo preparado para poder especificar desde la acción qué opciones queremos en el campo select del formulario ComprarForm

   $this->formulario = new ComprarForm('armas');

Y en la vista sin modificar el código ya nos aparecerán los productos que estamos deseando comprar.

2 comentarios | Archivado como Desarrollo web | 30/12/2009

Transacciones con Propel 1.3 y Symfony >= 1.2

Escrito por admin el 26-12-2009

Cuando tenemos que actualizar varias tablas, insertando, borrando o actualizando varios registros en cada una de las mismas y cuya integridad puede estar en riesgo en caso de que una de las operaciones falle, nos es crítico el uso de transacciones.

Si estamos usando Symfony y el orm Propel, con mySql e innodb, podemos hacer lo siguiente:


    $con = Propel::getConnection();

    try {
         //abrimos la transacción
         $con->beginTransaction();

         //operaciones pertinentes contra la base de datos

         //si todo va bien guardamos los cambios
         $con->commit();

    } catch (Exception $e) {

         // Hacemos rollback de los cambios en caso de fallo
         $con->rollback();
         //devolvemos el error al depurador
         throw $e;
    }

Saludos, Asier Marqués

1 comentario | Archivado como Desarrollo web | 26/12/2009

¿Por qué contratar nuestros servicios?

Escrito por admin el 22-12-2009

En Blackslot nos dedicamos a dos cosas: a la gestión de sistemas TI y el desarrollo avanzado de aplicaciones web para nuestros clientes.
Nuestro enfoque consiste en crear soluciones conjuntas o específicamente para cada uno de esas áreas sin salirnos del ámbito de internet.

Gestión de infraestructuras TI

En internet es clave disponer de una óptima infraestructura técnica de sistemas, que no sólo englobe la instalación y configuración del servidor o servidores involucrados en un proyecto. Nuestra apuesta es una gestión de sistemas en la que los profesionales encargados de administrar las infraestructuras de nuestros clientes o nuestras propias soluciones platform as a service, tengan siempre un punto de vista crítico sobre las necesidades reales que pueda tener el proyecto, ofreciendo un know-how junto a las tecnologías de desarrollo más vanguardistas disponibles en éste momento.

Desarrollo avanzado de aplicaciones para internet

Hoy en día, el desarrollo de un proyecto en internet requiere un punto de vista global que abarca más disciplinas que el diseño y desarrollo de una aplicación web. Además de contar con una buena arquitectura de software, que escale adecuadamente y sea fácilmente mantenible, nos enfrentamos con la problemática de conseguirlo haciendo un buen uso de los recursos de los que precisamos, tanto económicos como tecnológicos, tanto a medio como a largo plazo.

En Blackslot desarrollamos bajo plataformas maduras, como .net o php, haciendo uso de herramientas y frameworks como asp.net mvc y symfony que nos permiten desarrollar aplicaciones de una forma ágil, dotadas de una arquitectura sólida, escalable y de gran nivel de calidad.

Además podemos asegurar un gran nivel de estabilidad y fiabilidad tanto a medio como a largo plazo en nuestras aplicaciones, al realizar despliegues sobre nuestra propia infraestructura de sistemas. Este punto es nuestra mayor baza para poder asegurar un servicio completo y de gran calidad, sin importar lo ambicioso que pueda llegar a ser el proyecto.

1 comentario | Archivado como Desarrollo web, Nuestros servicios, Sistemas TI | 22/12/2009