Menu

#136 Clase PHP Javascript: los métodos que construyen objetos pueden producir código JS incorrecto

2.17.0
closed
None
defect
runtime
minor
fixed
2017-02-22
2017-02-22
No

Los métodos de la clase PHP Javascript que construyen objetos producen código javascript inválido si alguna de las claves de los arreglos que reciben no corresponde a un nombre de propiedad válido para javascript, dado que las claves de los objetos se emiten sin comillas.

Ejemplos que generan objetos javascript inválidos:

<?php
Javascript::construirObjeto(array('una-clave' => 42));
// Genera { una-clave: 42 }
//          ^ error
Javascript::construirArray(array('a', 'x-y', array('b' => 'ok', '%prop' => 'err')));
// Genera [ 'a', 'x-y', { b: "ok", %prop: 'err' } ]
//                                 ^ error

Para solucionarlo, las claves que no correspondan a nombres de propiedad válidos en javascript se deben emitir encerradas entre comillas:

{ "una-clave": 42 }

Discussion

  • Gaston Martini

    Gaston Martini - 2017-02-22
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -3,6 +3,7 @@
     Ejemplos que generan objetos javascript inválidos:
    
     ```php
    +<?php
     Javascript::construirObjeto(array('una-clave' => 42));
     // Genera { una-clave: 42 }
     //          ^ error
    
     
  • Gaston Martini

    Gaston Martini - 2017-02-22
    • status: assigned --> closed
    • Resolution: --> fixed
     
  • Gaston Martini

    Gaston Martini - 2017-02-22

    Resuelto en [r951].

    Se agregó el parámetro $claves_como_strings en Javascript::construirLista(), Javascript::construirObjeto() y Javascript::construirArray(), con default false para no cambiar el comportamiento existente.

    Este parámetro permite a los clientes indicar cuándo se deben usar comillas en los nombres de propiedades, en literales de objetos.

    Las comillas se podrían emitir automáticamente cuando una clave recibida no corresponde a un nombre de propiedad válido, para evitar construir un objeto inválido independientemente del valor del nuevo parámetro, pero esto requiere validar en PHP que un string dado sea válido como nombre de propiedad en javascript, y gramática que los define es compleja. Esto se puede implementar más adelante.

     

    Related

    Commit: [r951]

  • Gaston Martini

    Gaston Martini - 2017-02-22
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -12,7 +12,7 @@
     //                                 ^ error
     ```
    
    -Para solucionarlo, las claves que no correspondan a nombres de propiedad válidos en javascript se deben emitir encerradas entre comillas.
    +Para solucionarlo, las claves que no correspondan a nombres de propiedad válidos en javascript se deben emitir encerradas entre comillas:
    
     ```javascript
     { "una-clave": 42 }
    
     

Log in to post a comment.