Problemas con la autocarga de objetos y formulario

edited noviembre 2010 in Principiantes
Hola a todos
Tengo un formulario y estoy tratando de seguir el manual de autocarga de objetos (<!-- m --><a class="postlink" href="http://wiki.kumbiaphp.com/AutoCarga_de_Objetos_KumbiaPHP">http://wiki.kumbiaphp.com/AutoCarga_de_ ... _KumbiaPHP</a><!-- m -->)
El formulario muestra los campos correctamente... a excepción de los campos numéricos que los deja en blanco.
Estoy utilizando kumbia 1.0, ¿alguien sabe a que es debido esto? Si hago un print del modelo recuperado salen todos los campos, incluso los numéricos, pero no los muestra de forma automática.

Gracias y un saludo

Comentarios

  • edited 6:13
    ... matizo, no muestra los campos que son igual a 0, cualquier otro número si <!-- s:?: --><img src="{SMILIES_PATH}/icon_question.gif" alt=":?:" title="Question" /><!-- s:?: -->
  • edited 6:13
    ¿De verdad nadie ha tenido problemas con esto? He probado el ejemplo para construir un CRUD de la wiki y le he añadido un campo numérico con los mismo resultados, ¿quiere esto decir que kumbia tiene un problema manejando números? No es posible que se piense que cero es igual a null, no tiene ningún sentido,¿qué se supone que tengo que hacer para que en la vista se carguen los campos numéricos que sean cero en la base de datos?
  • Mejor coloca el código que estas usando...
  • edited 6:13
    Realmente es el mismo ejemplo que hay en la web, este: <!-- m --><a class="postlink" href="http://wiki.kumbiaphp.com/Como_hacer_un_CRUD_en_KumbiaPHP_Framework">http://wiki.kumbiaphp.com/Como_hacer_un ... _Framework</a><!-- m -->
    Solo que a la tabla menus le he añadido un campo llamado precio de tipo FLOAT (con INT me ocurre lo mismo) y lo he añadido también a la vista para que lo mostrase.

    La vista me queda así:
    &lt;?php View&#58;&#58;content(); ?&gt;
    &lt;?php echo form_tag('menus/edit/') ?&gt;
    &lt;table&gt;
        &lt;tr&gt;
            &lt;td&gt;Nombre&lt;/td&gt;
            &lt;td&gt;&lt;?php echo text_field_tag(array('menus&#46;nombre')) ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Titulo&lt;/td&gt;
            &lt;td&gt;&lt;?php echo text_field_tag(array('menus&#46;titulo')) ?&gt;&lt;/td&gt;
        &lt;/tr&gt;   
        &lt;tr&gt;
          &lt;td&gt;Precio&lt;/td&gt;
          &lt;td&gt;&lt;?php echo text_field_tag(array('menus&#46;precio')) ?&gt;&lt;/td&gt;
        &lt;/tr&gt;    
        &lt;tr&gt;
            &lt;td&gt;&amp;nbsp;&lt;/td&gt;
            &lt;?php echo hidden_field_tag(array('menus&#46;id')) ?&gt;
            &lt;td&gt;&lt;?php echo submit_tag('Actualizar') ?&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
    &lt;?php echo end_form_tag() ?&gt;
    

    El modelo:
    class Menus extends ActiveRecord
          {
    
              /**
               * Retorna los menu para ser paginados
               *
               */
              public function getMenus($page, $ppage=20)
              {
                  return $this-&gt;paginate(&quot;page&#58; $page&quot;, &quot;per_page&#58; $ppage&quot;);
              }
          }
    

    Y el controlador:
    class MenusController extends ApplicationController {
        //Carga del modelo Menus, porque tenemos la autocarga de modelos desactivada (off)
        public $models = array('menus');   
     
        /**
         * Obtiene una lista para paginar los menus
         */
        public function index($page=1) 
        {
            $this-&gt;listMenus = $this-&gt;Menus-&gt;getMenus($page);
        }
     
        /**
         * Crea un Registro
         */
        public function create ()
        {
            /**
             * Se verifica si el usuario envio el form (submit) y si ademas 
             * dentro del array POST existe uno llamado &quot;menus&quot;
             * el cual aplica la autocarga de objeto para guardar los 
             * datos enviado por POST utilizando autocarga de objeto
             */
            if($this-&gt;has_post('menus')){
                /**
                 * se le pasa al modelo por constructor los datos del form y ActiveRecord recoge esos datos
                 * y los asocia al campo correspondiente siempre y cuando se utilice la convención
                 * model&#46;campo
                 */
                $menu = new Menus($this-&gt;post('menus'));
                //En caso que falle la operación de guardar
                if(!$menu-&gt;save()){
                    Flash&#58;&#58;error('Falló Operación');
                    //se hacen persistente los datos en el formulario
                    $this-&gt;menus = $this-&gt;post('menus');
                    /**
                     * NOTA&#58; para que la autocarga aplique de forma correcta, es necesario que llame a la variable de instancia
                     * igual como esta el model de la vista, en este caso el model es &quot;menus&quot; y quedaria $this-&gt;menus
                     */
                }else{
                    Flash&#58;&#58;success('Operación exitosa');
                }
            }
        }
     
        /**
         * Edita un Registro
         */
        public function edit($id = null)
        {
        	if($id != null){
        	    //Aplicando la autocarga de objeto, para comenzar la edición
                $this-&gt;menus = $this-&gt;Menus-&gt;find($id);
        	}
            //se verifica si se ha enviado el formulario (submit)
            if($this-&gt;has_post('menus')){
     
                if(!$this-&gt;Menus-&gt;update($this-&gt;post('menus'))){
                    Flash&#58;&#58;error('Falló Operación');
                    //se hacen persistente los datos en el formulario
                    $this-&gt;menus = $this-&gt;post('menus');
                } else {
                    Router&#58;&#58;route_to('action&#58; index');
                }
            }
        }
     
        /**
         * Eliminar un menu
         * 
         * @param int $id
         */
        public function del($id = null)
        {
            if ($id) {
                if (!$this-&gt;Menus-&gt;delete($id)) {
                    Flash&#58;&#58;error('Falló Operación');
                }
            }
            //enrutando al index para listar los menus
            Router&#58;&#58;route_to('action&#58; index');
        }
    }
    
  • edited 6:13
    Sigo sin poder solucionar este problema, ¿alguna idea? ya no se me ocurren más cosas para intentar solucionarlo <!-- s:| --><img src="{SMILIES_PATH}/icon_neutral.gif" alt=":|" title="Neutral" /><!-- s:| -->
  • exactamente en que action tienes problema de autocarga??
  • edited 6:13
    Supongo que quiere aplicar la autocarga a la vista edit

    en el controller en vez de
    $this-&gt;menus = $this-&gt;Menus-&gt;find($id); 
    //puede usar 
    $this-&gt;menus = $this-&gt;Menus-&gt;find_first($id);
    


    Verifique que el registro existe o que esta cargando contenido, en la vista use
    echo var_dump($menus);
    
    con esto vera la información que esta cargando la autocarga del objeto y si es que tiene mal el nombre de las variables
    cuéntenos como le fue
  • Gracias por la ayuda, pero realmente el "problema" no es el funcionamiento en si del ejemplo, quiero decir, los datos se recuperan y cargan en el formulario perfectamente, el problema es que si hay un campo numérico = 0, el input correspondiente sale vacío, en lugar de con un 0.
    Un saludo
  • Supongo que es lo que hay, para kumbiaphp 0=null
    He hecho varias pruebas y el resultado siempre es el mismo, el 0 no se muestra en el campo numérico. ¿Puede alguien confirmarme esto?

    Salu2
  • edited 6:13
    Lo probe justo en un form que estoy haciendo y tenes razon, no autocarga los campos con valor cero, los carga vacios y para peor si los guardas nuevamente sin escribir el cero te lo guarda como NULL. En lo que estoy haciendo no afecta, pero dependiendo de la aplicacion puede ser un problema.

    Si encuentro algo te aviso.

    Saludos Cordiales!!
Sign In or Register to comment.