Problemas con clase HTML


(Rafael Rosales) #1

Hola comunidad recientemente he empezado a utilizar yii2, por lo que me dan dando algunos problemas de principiante, por ejemplo en yii1.1 utilizaba la classe CHTML, pero he leido en forum que ahora en Yii2 se utiliza la clase HTML, por lo que pongo este post para aprender a usar esta clase, ahora en mi controlador tengo:


 public function actionObtenerProducto() {

        $codigo = $_POST['incodigo'];

        //  $destino = $_POST['idde'];

        $producto = Productos::model()->findByPk((string) $codigo);

        $producmayor = Submayor::model()->find('Codpro=:Codpro', array(':Codpro' => $producto->CodSubp));

        $almacen = Almacenes::model()->find('CodPVen=:CodPVen', array(':CodPVen' => $producmayor->CodPVen));

        echo CJSON::encode(array(

            'descripcion' => $producto->NProductos,

            'codigo' => $producto->Codprod,

            'preciomn' => $producto->PreMay,

            'existencia' => $producmayor->SaldoAct,

            'Idum' => $producto->UM,

            'CodPVen' => $almacen->Descripcion,

        ));

    }

en mi forma tengo esto:


                         echo Html::textField('incodigo', '', array(

                            'id' => 'incodigo',

                            'ajax' => array(

                                'type' => 'POST',

                                'url' => CController::createUrl('datossal/obtenerProducto'),

                                'dataType' => 'json',

                                'data' => array(

                                    'incodigo' => 'js:this.value',

                                    'idde' => 'js:$("#Datossal_Codde").val()',

                                ),

                                'success' => 'function(data) { 

                                                $("#producto").val(data.descripcion);

                                                $("#inproductos").val(data.codigo);                                            

                                                $("#preciomn").val(data.preciomn);

                                                $("#existencia").val(data.existencia);

                                                $("#Idum").val(data.Idum);  

                                                $("#codpro").val(data.CodSubp); 

                                                $("#CodPVen").val(data.CodPVen);  

                                                }')

                        ));

                        ?>

y


                         echo Html::textField('producto', '', array('size' => 70, 'readonly' => true));

                        ?>

pero me da error, no se que tengo mal en este codigo, ya que en Yii1.1 lo utlizaba mas o menos asi pero con CHTML, miren a ver si me echan una mano


(Rhf1898) #2

hola,

supongo que tienes la linea


use yii\helpers\Html;

al principio del archivo. Con eso el código:


echo Html::textInput('producto', '', array('size' => 70, 'readonly' => true));

Mostrará una caja de texto. Luego ve añadiendo las opciones a ver que errores aparecen.


(Rafael Rosales) #3

Hola rahif gracias por responder, mira ahora no encuentra la clase CControler en esta linea


 'url' => CController::createUrl('datossal/obtenerProducto'),



Como esto es importado de yii1.1, no se como trabaja esto aquí, ahi me muestra el error:


 PHP Fatal Error – yii\base\ErrorException

Class 'CController' not found




(Rhf1898) #4

use yii\helpers\Url;

$url = Url::to(['datossal/obtenerProducto']);

En yii2 esta más definido modulo-vista-controlador, la creación de url se pasa al helper Url para poder utilizarlo

desde las vistas sin necesidad del controlador.


(Rafael Rosales) #5

Gracias rahif por responder, esto me da varios errores, parece que la traslacion de yii1.1 a yii2 es compleja, por ejemplo me da problemas con los lisdata, me dice:


 PHP Fatal Error – yii\base\ErrorException

Call to undefined method yii\helpers\Html::listData()

en este pedazo de codigo


 echo Html::dropDownList('incmay', '', Html::listData(Cmayorista::model()->findAll(array('order' => 'Descripcion DESC')), 'IdMay', 'Descripcion'));

parece que realmente necesito CHTML, que en el forum de yii2 veo que lo utilizan mucho


(Rhf1898) #6

En Yii2 se ha reescrito el codigo completamente. Se mantiene la forma en la que se utiliza pero los conceptos se han modificado.

Pasar una aplicación de Yii1 a Yii2 es complicado, quiza es más fácil rehacer la aplicación entera.

En Yii2 ho hay clase CHTML, esta el helper Html.

Empieza con una aplicación más simple, o ve haciendo una compleja poco a poco (por modulos) pero lleva tiempo.

Si puedes Utiliza php 7.2 que es la última versión de php y tomatelo con calma.

saludos