Dudas sobre trabajo con modulos

Hola todos recien he comenzado a trabajar con modulos, pero necesito actualizar esto, ya que tengo algunas dudas al respecto, esto es lo que he hecho hasta ahora:

Cree por: localhost/sistema=gii, 2 modulos, el de admin y el de facturacion, al crearlo solo me capta estos tres elementos: modules\facturacion\FacturacionModule.php

modules\facturacion\controllers\DefaultController.php

modules\facturacion\views\default\index.php

las demas carpetas las creo a mano en protected\modules\facturacion, en el main del config actualizo esto con los modulos creados:




 'gii' => array(

        	'class' => 'system.gii.GiiModule',

        	'password' => 'clave',

        	// If removed, Gii defaults to localhost only. Edit carefully to taste.

        	'ipFilters' => array('127.0.0.1', '::1'),

    	),

   		'facturacion',

 		'admin',



y el import puse esto:




'import' => array(

    	'application.models.*',

    	'application.components.*',

    	'application.extensions.*',

    	....

    	'application.modules.facturacion.*',

    	'application.modules.facturacion.components*',

   	.....

	),



copio la carpeta layouts del sistema para la carpeta views del modulo y lo adapto al modulo, anteponiendo al url el camino hasta el modulo: ejemplo con este trozo de codigo, uso la extension multilevelhorizontalmenu:




array("url" => '#', 'visible' => Yii::app()->user->checkAccess("datos"),

                    	"label" => "Salidas",

                    	array("url" => "",

                        	"label" => "Ventas MN",

                        	array("url" => array(

                                	"route" => "/facturacion/datossal/create"),

                            	"label" => "Crer Ventas MN",),

                        	array("url" => array(

                                	"route" => "/facturacion/datossal/admin"),

                            	"label" => "Administrar Ventas MN",),

                    	),

                    	array("url" => "",

                        	"label" => "Ventas CUC",

                        	array("url" => array(

                                	"route" => "/facturacion/datossalc/create"),

                            	"label" => "Crer Ventas en CUC",),

                        	array("url" => array(

                                	"route" => "/facturacion/datossalc/admin"),

                            	"label" => "Administrar Ventas en CUC",),

                    	),

                    	array("url" => "",

                        	"label" => "Transferencias de traslados",

                        	array("url" => array(

                                	"route" => "/facturacion/datostrans/create"),

                            	"label" => "Crear Transferencias",),

                        	array("url" => array(

                                	"route" => "/facturacion/datostrans/admin"),

                            	"label" => "Administrar Transferencias",),

                    	),

                    	array("url" => "",

                        	"label" => "Movimientos de Salida",

                        	array("url" => array(

                                	"route" => "/facturacion/invdocumentomovs/create"),

                            	"label" => "Crear Movimientos de Salida",),

                        	array("url" => array(

                                	"route" => "/facturacion/invdocumentomovs/admin"),

                            	"label" => "Administrar Movimientos de Salida",),

                    	),

                    	array("url" => "",

                        	"label" => "Prefacturas",

                        	array("url" => array(

                                	"route" => "/facturacion/prefacturas/admin"),

                            	"label" => "Administrar Prefacturas",),

                    	),

                    	array("url" => "",

                        	"label" => "Conduces",

                        	array("url" => array(

                                	"route" => "/facturacion/conduces/admin"),

                            	"label" => "Administrar Conduces",),

                    	),

                	),

......



copio la carpeta components con el fichero Controller.php del sistema a la carpeta del modulo, creo roles (uso cruge) para acceso al modulo y ese rol lo tengo en cuenta el beforeControllerAction del FacturacionModule:




public function beforeControllerAction($controller, $action)

	{

        	

		if (parent::beforeControllerAction($controller, $action)) {

        	if (!Yii::app()->user->checkAccess("ventas", Yii::app()->user->id)) {

            	throw new CHttpException(403, Yii::t('yii', 'Usted no se encuentra autorizado a realizar esta acción'));

        	} else {

            	return true;

        	}

    	}

		else

			return false;

	}



copio los controladores, model y views que tenia en el proyecto general para las carpetas asignadas en el modulo y renderizo las acciones para el modulo ej:

si tenia: controlador/accion, ahora lo tengo modulo/controlador/accion, ¿Es todo correcto esto?

Hay algunas cosas que ahora no funcionan dentro del modulo Ej: los combos dependientes no se actualizan, al seleccionar el objeto en el primer combo no muestra los resultados en segundo, a pesar que al debuguear si se ven los resultados, con estos codigos:

En el controlador




public function actionActualizarFirmantes() {

    	$model = NomProveedores::model()->findByPk($_POST['idCodigo']);

    	//llenar representantes Proveedor

    	$data = CHtml::listData($model->nomRepresentanteProveedor, 'CI', 'nombre');

    	$nomRepresentanteProveedor = "";

    	foreach ($data as $value => $name)

        	$nomRepresentanteProveedor .= CHtml::tag('option', array('value' => $value), CHtml::encode($name), true);

    	// return data (JSON formatted)

    	echo CJSON::encode(array(

        	'nomRepresentanteProveedor' => $nomRepresentanteProveedor,

            	)

    	);

	}



1er combo en la vista




<td title="Selecione el provedor"><?php echo $form->labelEx($model, 'CodProvedor'); ?>

                    	<?php

                    	$this->widget('ext.select2.ESelect2', array(

                        	'model' => $model,

                        	'attribute' => 'CodProvedor',

                        	'data' => CHtml::listData(NomProveedores::model()->findAll(array('order' => 'descripcion')), 'CodProvedor', 'descripcion'),

                        	'htmlOptions' => array(

                            	'style' => 'width: 260px;',

                            	'placeholder' => 'Seleccione el proveedor',

                            	'ajax' =>

                            	array(

                                	'type' => 'POST',

                                	'url' => CController::createUrl('datosrecepcion/actualizarFirmantes'),

                                	'dataType' => 'json',

                                	'data' => array('idCodigo' => 'js:this.value'),

                                	'success' => 'function(data) {

                                  	$("#Datosrecepcion_CI").html(data.nomRepresentanteProveedor);

                            	}'

                            	)

                        	)

                            	)

                    	);

                    	?>

                    	<?php echo $form->error($model, 'CodProvedor'); ?>

                	</td>



Segundo combo en la vista




<td title="Selecione quien firma factura">

                    	<?php echo $form->labelEx($model, 'CI'); ?>

                    	<?php

                    	echo $form->dropDownList($model, 'CI', array(), array('prompt' => 'Seleccione persona autorizada')

                    	);

                    	?>

                    	<?php echo $form->error($model, 'CI'); ?> 

  	</td>



Tampoco se muestran resultados donde tengan acciones similares a los combos, Ej:

Para seleccionar productos, lo hago con esta accion en el controlador, para mostrarlo luego en la vista:




public function actionObtenerProducto() {

   	$codigo = $_POST['incodigo'];

   	$destino = $_POST['idde'];

    	$productop = Subproductos::model()->findByPk((string) $codigo);

    	$productos = Productos::model()->find('CodSubp= :idp ', array(':idp' => $productop->Codpro));

 		$produmayor = Submyproductos::model()->find('Codpro=:Codpro', array(':Codpro' => $productop->Codpro));


    	echo CJSON::encode(array(

        	'descripcion' => $productop->NProductos,

        	'codigo' => $productop->Codpro,

        	'preciomn' => $productos->PreMay,

        	'existencia' => $produmayor->SaldoAct,

        	'preciocuc' => $productos->PrCUC,

        	'Idum' => $productop->UM,

        	'CodPVen' => $produmayor->CodPVen,

    	));

	}



en la vista lo capto asi:




<table style="width:47%">

    	<tr>      	

        	<td width="129" title="Código de submayor">

            	<label>C&oacute;digo</label>

            	<?php

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

                	'id' => 'incodigo',

                	'ajax' => array(

                    	'type' => 'POST',

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

                    	'dataType' => 'json',

                    	'data' => array(

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

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

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

                    	),

                    	'success' => 'function(data) {

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

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

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

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

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

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

             	}')

            	));

            	?>	

        	</td>

        	<td title="Cantidad a Recepcionar"><label class="selected">Cantidad</label>

            	<input name="text" type="text" id="incantidad" value="" size="16" />

        	</td>

        	<td colspan="3" title="Nombre del producto"><label class="odd">Producto</label>

            	<?php

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

            	?>

        	</td> 

    	</tr>  

    	<tr> 

        	<td width="140" title="Saldo actual">

            	<label class="odd">Existencia</label>

            	<input type="text" id="existencia" size="16" readonly="true"/>   			

        	</td>


        	<td width="140" title="Precio May sin impuesto"><label class="odd">Precio MN</label>

            	<input name="text2" type="text" id ="preciomn" size="16" readonly="true"/>

        	</td>

        	<td width="140" title="Precio CUC sin impuesto"><label class="odd">Precio CUC</label>

            	<input name="text2" type="text" id ="preciocuc" size="16" readonly="true"/>

        	</td>

        	<td width="140" title="Unidad de medida"><label class="odd">UM</label>

            	<input name="text2" type="text" id ="Idum" size="16" readonly="true"/>

        	</td>

        	<td width="24" title="Código del almacén"><label>Almacén</label>

            	<input name="text2" type="text" id ="CodPVen" size="16" readonly="true"/>

        	</td>


    	</tr>  


    	<tr>

        	<td>

            	<input name="button" type="button" id="btnAdd" value="Adicionar Producto"/> 	

        	</td>

    	</tr>

	</table>



Aclaro que esto si funcionaba fuera del modulo, necesito ayuda para esto ya que mi sistema se esta haciendo grande y va a tener mas modulos

Buenas Rafael.

Creo q te has hecho un lío con los módulos.

En primer lugar (y aunque sobra decirlo), si vas a trabajar con módulos es mejor hacerlo desde el principio. En este caso entiendo que tenías una aplicación sin módulos y la quieres migrar a una aplicación con módulos. Entonces vamos a centrarnos en tu caso.

1- Para crear un módulo lo puedes hacer desde Gii o a mano. Lo lógico es hacerlo desde Gii como hiciste tú.

2- Una vez creas el módulo desde Gii, efectivamente aparece una estructura de directorios tal que :

  • modules/mimodulo/MimoduloModule.php

  • modules/mimodulo/controllers

  • modules/mimodulo/models

  • modules/mimodulo/views

3- Has añadido tus módulos dentro del array "modules" en el config/main.php. Bien.

4- Ahora tienes que copiar los modelos que quieres que vayan en tu módulo en el directorio modules/mimodulo/models, lo mismo que los controladores y vistas asociadas.

5- Por último, tienes que actualizar TODAS las referencias a las acciones de los controladores, pq ya no están bajo el proyecto principal, sino bajo un módulo. Las referencias sin módulos serían controlador/acción, y con el nuevo sistema de módulos serían módulo/controlador/acción.

6- Si no he leído mal, por ejemplo en tu lista desplegable dependiente tienes algo así:




'url' => CController::createUrl('datosrecepcion/actualizarFirmantes'),



Dices que esto te devuelve resultados al debugear, pero, creo que eso no puede ser. Es imposible. Esa línea de código debería generarte algo como esto:




tuhost/index.php?r=datosrecepcion/actualizarfirmantes



Si esto muestra algún dato al debugear, es que sigue existiendo un controlador llamado datosrecepcion que tiene una acción actualizarFirmantes en protected/controllers.

Lo correcto sería tener:




'url' => CController::createUrl('tumodulo/datosrecepcion/actualizarFirmantes'),



Que generaría la url tuhost/index.php?r=tumodulo/datosrecepcion/actualizarFirmantes.

7- Si tu problema no es este, vé posteando aquí uno por uno los problemas que tienes y el código que usas e intentaré ayudarte, ok? Es que tu post es muy extenso y me he perdido :)

Un saludo.

Hola Rafael,

@lagogz ha respondido muy bien y dudo que pueda añadir más.

No olvides olvidar que cuando añades un módulo, Yii utiliza el nombre del módulo en tu configuración (ie


'modules' => [ 'mymodule' => []]

para la creación de rutas URL (.ie ‘http://dominio.com/mymodule/controladorId/actionId’)

Para más información: http://www.yiiframework.com/doc/guide/1.1/en/basics.module#using-module

Hola lagogz y Antonio gracias por responder, realmnete si tenia por ejemplo en mis url esto:




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



Ahora al ponerlo asi:




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



me genera el siguiente error al debuguear




<No es posible resolver la solicitud "facturacion/facturacion/datosrecepcion/obtenerProducto"



y en D:\xampp\htdocs\SoftVentas\protected\controllers, no tengo el controlador datosrecepcion, todos los controladores que hacer referencia a la facturacion los pase para

D:\xampp\htdocs\SoftVentas\protected\modules\facturacion\controllers, al igual que los modelos y las vistas, solo deje los controladores, vistas y modelos que son comunes a mas de un modulo.

Buenas.

Escribe esto:




 'url' => Yii::app()->createUrl('facturacion/datosrecepcion/obtenerProducto'),



A ver qué pasa.

Un saludo.

P.D.: puedes probar también con




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



(empieza la ruta con "/")

o con




 'url' => CController::createUrl($this->module->id . '/datosrecepcion/obtenerProducto'),// o Yii::app()->controller->module->id 



a ver qué pasa.

Hola lagogz, gracias por responder, lo puse de todas las formas posibles que me diste, en realidad me elimina el error, y al debuguear me muestra los valores que me debe mostrar al hacer la operacion, pero en realidad me muestra los resultados vacios (no muestra lo que se ve al debuguear) en el segundo combo, o donde corresponda segun la ubicacion, si es un combo o un cuadro texto.

por ejemplo en este caso, tengo en el controlador:




  public function actionObtenerProducto() {

    	$codigo = $_POST['incodigo'];

   	$productop = Subproductos::model()->findByPk((string) $codigo);

    	$productos = Productos::model()->find('CodSubp= :idp ', array(':idp' => $productop->Codpro));

    	$produmayor = Submyproductos::model()->find('Codpro=:Codpro', array(':Codpro' => $productop->Codpro));


    	echo CJSON::encode(array(

        	'descripcion' => $productop->NProductos,

        	'codigo' => $productop->Codpro,

        	'preciomn' => $productos->PreMay,

        	'existencia' => $produmayor->SaldoAct,

        	'preciocuc' => $productos->PrCUC,

        	'Idum' => $productop->UM,

        	'CodPVen' => $produmayor->CodPVen,

    	));

	}



y en el form:




<tr>      	

        	<td width="129" title="Código de submayor">

            	<label>C&oacute;digo</label>

            	<?php

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

                	'id' => 'incodigo',

                	'ajax' => array(

                    	'type' => 'POST',

                    	'url' => Yii::app()->createUrl('facturacion/datosrecepcion/obtenerProducto'),

                    	'dataType' => 'json',

                    	'data' => array(

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

                    	),

                    	'success' => 'function(data) {

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

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

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

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

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

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

			     }')

            	));

            	?>	

        	</td>

        	<td title="Cantidad a Recepcionar"><label class="selected">Cantidad</label>

            	<input name="text" type="text" id="incantidad" value="" size="16" />

        	</td>

        	<td colspan="3" title="Nombre del producto"><label class="odd">Producto</label>

            	<?php

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

            	?>

        	</td> 

    	</tr>  

    	<tr> 

        	<td width="140" title="Saldo actual">

            	<label class="odd">Existencia</label>

            	<input type="text" id="existencia" size="16" readonly="true"/>       		

        	</td>


        	<td width="140" title="Precio May sin impuesto"><label class="odd">Precio MN</label>

            	<input name="text2" type="text" id ="preciomn" size="16" readonly="true"/>

        	</td>

        	<td width="140" title="Precio CUC sin impuesto"><label class="odd">Precio CUC</label>

            	<input name="text2" type="text" id ="preciocuc" size="16" readonly="true"/>

        	</td>

        	<td width="140" title="Unidad de medida"><label class="odd">UM</label>

            	<input name="text2" type="text" id ="Idum" size="16" readonly="true"/>

        	</td>

        	<td width="24" title="Código del almacén"><label>Almacén</label>

            	<input name="text2" type="text" id ="CodPVen" size="16" readonly="true"/>

        	</td>

    	</tr>  



al hacer el debug me muestra los resultados, pero los cuadros textos no los llena

Hola de nuevo, al debuguear con firefox veo que en consola errores me da estos:

SyntaxError: missing : after property id

ReferenceError: $ is not defined

Buenas, Rafael.

Esto ya no es problema de módulos.

Primero de nada debes saber dónde te falla.

Te falla en la llamada AJAX, en la acción o en la respuesta?

Por ejemplo, pon algo así en la acción y a ver si te lo imprime en la consola:




public function actionObtenerProducto() 

{

     var_dump('hasta aquí llego');

     exit;

...

...



Y vé testeando trozos de código para saber dónde te falla.

Un saludo.

Rafael,

En la creación de URLs Yii los hace relativos a tu current PATH si no pones "/" (<— indica el root.) delante de tus url, es por éso que sale "facturacion/facturacion". Para indicar que es para el módulo debes iniciarlos así:


Yii::app()->createUrl('/facturacion/datosrecepcion/obtenerProducto'),

Un saludo

Por cierto, te recomiendo que utilices xdebug para seguimiento de errores. Es lo mejor si no quieres llenar tu código de ‘var_dump’, no hay nada malo en ello, todos hemos pasado por ahí pero xdebug te dará otra perspectiva.

En lo que se refiere a los errores de consola, utiliza breakpoints para saber dónde exactamente te falla. Por el error, sé que es un objeto cuya propiedad no ha sido asignada correctamente.

Gracias Antonio y lagogz por responder, le puse:




public function actionObtenerProducto() {

 		var_dump('hasta aquí llego');

    	exit;



en todas las funciones que intervienen en el controlador desde el principio y realmente ahi mismo me bota y me da el resultado:

<string(17) "hasta aquí llego" asi que el error comienza desde el principio de la accion, lo otro en realidad no se como utilizar xdebug, para tener mas elementos.

Espero nuevas posibilidades de respuestas

Buenas, Antonio. Siempre tengo xdebug instalado pq los errores y prints son mucho más ordenados e intuitivos, pero la verdad nunca debugueé con ningún IDE. Con cuál IDE debugueas tú?

Rafael, entonces sí te entra en tu acción. Ve cambiando el var_dump de sitio para ver en qué línea te salta el error.

Un saludo.

Buenas lagogz gracias por responder, ya probe en varios lugares, y donde da el error es en las funciones donde interviene ajax, aqui dejo una imagen para que vean como quedan los combos y cuadros textos vacios, aunque al hacer el debug si muestra los resultados:

[size="4"][font="Comic Sans MS"][color="Red"][color="Black"]

Como obervaran no muestra los resultados en en ningun combo, ni en los cuadros textos cuando tecleo el codigo 159, sin embargo al debuguear si los muestra, o sea que encuentra los valores en la BD para cada caso, por ejemplo al teclear el codigo 159 para producto, al debuguear me da estos resultados, aqui debia mostrar en: Producto: [/color][/color][/font][/size][b][size="4"][font="Comic Sans MS"][color="Red"][color="Black"]Leche descremada en polvo en bolsas de 1 x 25, debia poner en existencia: 0.00, en Precio MN: 28.47, en Precio CUC: 3.59, en UM: KG, en almacen: 54, pero los deja vacio, este es el resultado al debuguear:

[/color][/color][/font][/size][/b]<{"descripcion":"Leche descremada en polvo en bolsas de 1 x 25 KG","codigo":"159","preciomn":"28.470000","existencia":"0.00","preciocuc":"3.590000","Idum":"KG","CodPVen":"54"}

Al hacer debug file con el NetBeans 8 que utilizo me genera el siguiente error:

Fatal error: Class ‘Controller’ not found in D:\xampp\htdocs\SoftVentas\protected\modules\facturacion\controllers\DatosrecepcionController.php on line [b]3

y esta es la linea:




class DatosrecepcionController extends Controller {



[/b]Espero alguna idea, al respecto

Instale xdebug en mi php y al hacer debug file con el NetBeans a la forma me da este error:

este es el codigo con la linea:




<?php

        	$form = $this->beginWidget('CActiveForm', array( //esta es la linea 212

            	'id' => 'datosrecepcion-form',

            	'enableAjaxValidation' => false,

        	));

        	?>



Buenas, Rafael.

Respecto a lo primero :




class DatosrecepcionController extends Controller 

{

...



Tienes alguna clase llamada Controller?. Es decir, has creado una clase propia que extienda de CController? Es q si no lo has hecho la línea está mal y sería:




class DatosrecepcionController extends CController 

{

...



Respecto a lo segundo, supongo que viene de lo primero.

En tu vista, $this se refiere al controlador actual. Lo que te está diciendo el error es que no hai ninguna instancia del controlador, no ha sido creada, por lo que $this no existe. Supongo que será pq no existe ninguna clase llamada Controller. Si cambias Controller por CController supongo que se solucionarán los 2 problemas (que en realidad son el mismo).

Un saludo.

Burenos dias lagogz, gracias por responder, en realidad la clase que tengo es Controler, ya que cuando pongo CControler me dice que no tengo ninguna clase con es nombre, y cuando voy al completamiento de codigo la que me sale es Controler.

Esta es mi clase que se encuentra en D:\xampp\htdocs\SoftVentas\protected\modules\facturacion\components




class Controller extends CController {


	public $menu = array();

	public $breadcrumbs = array();


	function init() {

    	$this->layout = 'main';

	}


}



Bien, entonces aclarado.

Pero supongo que esta clase controller la tenías en protected/components y la has pasado a protected/modules/facturacion/components, y… has añadido la importación en el config?

Es decir. Cuando la tenías en protected/components, en tu config/main.php tendrías esto:




'import'=>array(

		'application.components.*',

                ...

                ...



Con lo que al pasarla al módulo debes poner en el config esto:




'import'=>array(

                ...

		'application.modules.facturacion.components.*',

                ...

                ...



Y listo. Y no te líes, no quiero decir que haya que eliminar la línea referida al components de la aplicación, sino que hay que añadir la de cada módulo.

Una pregunta. Tu clase Controller sólo la usas en el módulo de facturación? Es que si la usas (o la tienes pensado usar) en otros módulos (o en el proyecto principal) no tiene sentido que la metas como componente del módulo.

Yo por ejemplo tengo componentes que no van en módulos pq los uso en toda la aplicación, y componentes que sí van en módulos pq sólo afectan al módulo.

Un saludo.

PD.: es imposible que te diga que no existe la clase CController. Tú pones que te dice que no existe la clase CControler (le falta una "l"), igual ése es el problema. Ten en cuenta que CController es una clase nativa del framework.

Gracias lagogz por responder, ya tengo eso asi:




 'import' => array(

    	'application.models.*',

    	'application.components.*',

    	'application.extensions.*',

    	'application.extensions.multilevelhorizontalmenu.*',

    	'application.modules.cruge.components.*',

    	'application.modules.cruge.extensions.crugemailer.*',

    	'application.modules.auditTrail.models.AuditTrail',

    	'application.modules.produccion.*',

    	'application.modules.produccion.components*',

    	'application.modules.facturacion.*',

    	'application.modules.facturacion.components*',

    	'application.ext.extensions.ireport.*',

    	'ext.JasPHP.*',

    	'ext.YiiJasper.*',

    	'application.vendors.phpexcel.PHPExcel',

    	),



y lo uso en todos los modulos po eso esa clase la copie para cada modulo, yo puse todos los url asi: /facturacion/datosrecepcion/accion, ej: ( ‘url’ = > Yii::app() - > createUrl(’/facturacion/datosrecepcion/actualizarCombos’),al parecer lo que no encuenta es Controler me dice esto:

[size=“1”]Fatal error: Class ‘Controller’ not found in D:\xampp\htdocs\SoftVentas\protected\modules\facturacion\controllers\DatosrecepcionController.php on line 4, [/size]

Digo mas no encuentra CControler, ya que cuando hago debug a Controler me da este error:

[size=“1”]Fatal error: Class ‘CController’ not found in D:\xampp\htdocs\SoftVentas\protected\modules\facturacion\components\Controller.php on line 7[/size]

Buenas de nuevo Rafael.

Tienes mal el import de components de los módulos facturación y producción. Lo tienes así:


'application.modules.facturacion.components*',

'application.modules.produccion.components*',



Como ves, faltan puntos. Debería ser así:


'application.modules.facturacion.components.*',

'application.modules.produccion.components.*',



Así debería cogerte la clase. Lo que sí que no entiendo es pq no te encuentra la clase CController. Cómo haces el debug?

Un saludo.