fabricawebs
Blog donde podrás encontrar el árticulo o tutorial que estas buscando sobre PHP, JavaScript, XML, Flash, Ruby on Rails, o desarrollo web en general.

Symfony 2.1 Expected argument of type "object, array or empty", "string" given

By Carlos
Ayer actualicé mi Symfony 2.1.x y algunos de los formularios empezaron a  fallar, al final dí con el problema: los custom types.

En la actualización de Julio de 2012 se han modificado unas cuantas cosas, puedes verlas todas aqui https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md , en mi caso solo tuve que actualizar lo siguiente:

ANTES:


namespace Fourcats\AdminBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class ImageType extends AbstractType
{
    public function getDefaultOptions()
    {
        return array(
            // cannot have a required attribute
            'required'       => false,
            // Pass errors to the parent
            'error_bubbling' => true,
            'class'          => 'uploader'

        );
    }

    public function getParent()
    {
        return 'field';
    }

    public function getName()
    {
        return 'image';
    }
}



DESPÚES


namespace Fourcats\AdminBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class ImageType extends AbstractType
{


    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'compound' => false,
            // cannot have a required attribute
            'required'       => false,
            // Pass errors to the parent
            'error_bubbling' => true,
            'class'          => 'uploader'

        )
        );
    }

    public function getParent()
    {
        return 'form';
    }

    public function getName()
    {
        return 'image';
    }
}


La clase FieldType fue deprecated ahora debe usarse siempre FormType, por eso debe cambiarse en el método GetParent, por otra parte el método getDefaultOptions también fue deprecated ahora hay que usar setDefaultOptions, y recuerda incluir con use la clase OptionsResolverInterface.
 

Codemotion 2012

By Carlos


Tenía algunas dudas sobre que iba a sacar de las charlas que había anunciadas en el Codemotion pero la verdad es que ha sido un dia muy productivo.



Me han gustado bastante las charlas de Diego Muñoz y Carlos Sanchez sobre el "Workflow Release de Tuenti" y  "Dev to DevOps",  del primero me quedo con ideas muy buenas que no conocía y en las que tengo que profundizar, como el "dark launch",  subir una funcionalidad a producción para ver su rendimiento pero sin que los usuarios las puedan ver, u otras como lanzar nuevas funcionalidades solo con un grupo reducido de usuarios para ver su reacción o enviar distintos formatos de newsletters a distintos usuarios para ver cual es más eficaz, también algún truco sencillo como hacer php -l en los pre-commit para evitar puntos y coma olvidados y otros errores de sintaxis. La charla sobre DevOps me ha dejado claro el funcionamiento de algunas herramientas como Puppet o Vagrant, de las que ya había escuchado algo pero no sabía exactamente como funcionaban.



Después del descanso he asistido a un par de charlas sobre aplicaciones móviles, la primera de nscode "Cliente twitter en 45 mins" por Fernando Tapia, que explicó por encima el uso del storyboard y el manejo de xCode, todo parecía bastante sencillo, al menos para empezar a trastear. Luego ha venido la que para mi ha sido la charla estrella de la conferencia "Monetización de aplicaciones móviles" de Curro Rueda, resumir todo lo que ha contado se me hace imposible pero para que os hagais una idea he rellenado unas 20 páginas de la agenda de notas con trucos, cifras y consejos que solo se aprenden con la experiencia, dándote muchos palos, y que Curro generosamente ha compartido con nosotros.

El dia fue soleado así que la gente se animó a comer en el jardín de la universidad, allí vi muchas caras conocidas de otras conferencias: Symfony Live París, PhpBarcelona, deSymfony y el grupo de Symfony Madrid.



A la hora de la siesta nada mejor que una charlita de WebRTC, de la mano de Javier Cerviño. WebRTC es un estándar para transmisión de datos en tiempo real entre clientes, sin necesidad de pasar por el servidor, Javier explicó como se podrá usar este estándar para videoconferencias pero es una pena porque está tecnología de momento solo esta implementada a medias en algunas betas de navegadores y tardará unos años en poder usarse en el mercado. Luego tocó Tomás Corral con "Automatización de Unit Testing en Javascript", la charla fue muy reveladora, muchas herramientas nuevas que investigar, aunque la verdad me costó bastante seguirla pues la programación Js que utilizó habitualmente es infinitamente más sencilla que todo el entorno que presento Tomás.


Coffe break y las dos últimas charlas: "Symfony2 y su ecosistema" por Javier Aceituno, que fue añadiendo los componentes de Symfony2 y compañía en el código de una aplicación php plain, mostrando como y porque usar cada uno, fue bastante curioso ver todas las piezas de Symfony2 desmontadas pues uno usualmente lo usa todo junto por costumbre. La conferencia la terminé con "Construyendo un ecosistema para programadores" de David Bonilla, la sala estaba abarrotada fue digno de ver, en cuanto a la charla nos habló de las diferencias entre una aplicación y una plataforma, que se podría resumir en plataforma= aplicación + permitir que terceros hagan plugins y ofrecerlos directamente dentro de la aplicación. Empezó bastante bien, aunque en algunos puntos se repetía bastante, y para mi gusto hubiera hecho mejor en hacer caso a los de marketing de Atlassian y no debería haber comparado tanto los propios productos de Atlassian con los de otras compañías, para decir siempre lo bien que lo hacen en su empresa y lo malos que son el resto. Aún así la charla en general estuvo bien.



 

Ideup SimplePaginator con urls friendly

By Carlos
Estaba utilizando este bundle tan útil para paginar los listados en un nuevo proyecto y me encontre con el problema de que añadía el parámetro de la página actual por GET, dejando mis urls friendlys así www.friendly.loc/amigos/europa?page=1 . Esto no me molaba nada porque las urls las quería en el formato  www.friendly.loc/amigos/europa/1 y este paginador es muy comodo así que quería seguir usandolo.

La solución fue rapidísima, resulta que ya está preparado para funcionar con urls friendly, solo hay que añadir un parametro opcional "page" en tus rutas:


DirectoryBundle_friends_continent:
    pattern:  /amigos/{continentSlug}/{page}
    defaults: { _controller: DirectoryBundle:Default:listContinent, page:1 }
    requirements:
        page:  \d+



Una pena que no lo ponga en sus instrucciones de uso, porque antes de dar con esto perdí un rato revisando el código del bundle para ver como tendría que modificarlo.