Crear Un Render De Una Vista Desde Otro Controlador

Hola,

Ya se que es un poco raro pero desde cualquier controlador de la aplicación tengo que hacer un render de la vista "alumnos/25"

Esto realmente lo uso para guardar el html de la vista en $html y enviar un email con esa vista personalizada y el $html como cuerpo del mensaje, me funciona perfectamente desde el controlador Alumnos pero necesito poder hacerlo desde cualquier otro controlador

Si necesitáis más codigo lo puedo poner pero creo que es mejor poner solo lo relevante.

Este me funciona OK pero solo desde AlumnosController




	$html=$this->render('view', array(

			'model' => $this->loadModel($model->primaryKey, 'Alumnos'),

	),true);



He hecho varias pruebas con $modelAlumno=new Alumno(); …

Pero de momento no lo he conseguido.

En resumen lo que necesito es poder hacer esto desde cualquier controaldor




//Necesito poder crear este render desde cero, independientemente de donde esté

	$html=$this->render('alumnos/view/'.$idAlumno, array(

			'model' => $this->loadModel($model->primaryKey, 'Alumnos'),

	),true);



Gracias de antemano.

Saludos.

¿Acaso la función loadModel() es idéntica en todos los controladores? Postea tu código para entender mejor la situación.

Intentaré explicarme lo mejor posible.

Por un lado tengo AlumnosController que cuando se hace un create envía un email con todos los datos del nuevo alumno (Lo que hace realmente es que hace es un render de la vista Alumnos/view con un layot vacio, lo guarda en la variable $html y lo envía por email)

AlumnosController.php Este me funciona OK




public function actionCreate() {

	$model = new Alumnos;




	if (isset($_POST['Alumnos'])) {

		$model->setAttributes($_POST['Alumnos']);

		$model->FechaInscripcion =date("Y-m-d h:i:s",time() );


		if ($model->save()) {

			if (Yii::app()->getRequest()->getIsAjaxRequest())

				Yii::app()->end();

			else

			{


				$criteria = new CDbCriteria;  

				$criteria->addCondition('IdPerfil=1 or IdPerfil=3');

				$listaCorreo = Usuariosaplicacion::model()->findAll($criteria);

				foreach($listaCorreo as $indice=>$valor){

						$listaCorreo2[]=$valor['email'];	

				}

				$this->layout = 'vacio';

				$html=$this->render('view', array(

						'model' => $this->loadModel($model->primaryKey, 'Alumnos'),

				),true);

				//use 'contact' view from views/mail

				$mail = new YiiMailer('contact', array('message' => $html, 'name' => '', 'description' => '') );

				$mail->setFrom(Yii::app()->params['adminEmail'], 'Curso');

				$mail->setSubject("Nuevo alumno dado de alta");

				$mail->setTo($listaCorreo2);

				$mail->send();

				$this->redirect(array('update', 'id' => $model->primaryKey));

				

				

			}

		}

	}


	$this->render('create', array( 'model' => $model));

}



Por otro lado lo que quiero hacer es que cuando se llame a actionCreate del controlador AvisosController este haga un render de la vista alumnos/view para guardarla en la variable $html y enviarla por email, el problema lo tengo en que no se como hacer un render de alumno/view si estoy en el controlador AvisosController, como se ve en el código de arriba dicho render lo hago sin problema desde la el controlador AlumnosController

AvisisController.php Este es que no me funciona







public function actionCreate() 

{

        $model = new Avisos;


        if (isset($_POST['Avisos'])) 

            {

                //$model->setAttributes($_POST['Avisos']);

                $model->setAttributes($_POST['Avisos']);

                $model->IdUsuario=Yii::app()->user->id;

                $model->IdAlumno=Yii::app()->getSession()->get('IdAlumno');

                $model->Fecha=date("Y-m-d h:i:s",time());


                if ($model->save()) 

                    {

                        if (Yii::app()->getRequest()->getIsAjaxRequest())

                        {

                                Yii::app()->end();

                        }else

                        {




                            //Inicio email

                            

                            $criteria = new CDbCriteria;  

                            $criteria->addCondition('Id='.(int)$model->IdUsuarioDestino.' or IdPerfil=3');

                            $listaCorreo = Usuariosaplicacion::model()->findAll($criteria);

                            foreach($listaCorreo as $indice=>$valor){

                                $listaCorreo2[]=$valor['email'];	

                            }

                            $this->layout = 'vacio';

                            echo "IdAlumno=".$_SESSION['IdAlumno'];

                            $modelAlumnos=new Alumnos();

                            $html=$this->render('view', array(

                                'model' => $this->loadModel($modelAlumnos->primaryKey, 'Alumnos'),

                            ),true);

                            //use 'contact' view from views/mail

                            $mail = new YiiMailer('contact', array('message' => $html, 'name' => '', 'description' => '') );

                            //set properties

                            $mail->setFrom(Yii::app()->params['adminEmail'], 'Cursodel');

                            $mail->setSubject("Nuevo Aviso");

                            $mail->setTo($listaCorreo2);

                            $mail->send();

                            //Fin email





                            $this->redirect(array('alumnos/update', 'id' => Yii::app()->getSession()->get('IdAlumno')));

                        }

                }

        }


        $this->render('create', array( 'model' => $model));

}









Uff menudo rollo espero haberme explicado bien.

Sugerencias???

Saludos

Utilizas la vista de alumnos tanto en alumnos como en avisos, o sñolo la utilizas en avisos?

Creo q lo más conveniente sería generar las vistas necesarias en cada controlador.

Un saludo.

Intenta con


$html=$this->render('/alumnos/view', array(

    'model' => $this->loadModel($model->primaryKey, 'Alumnos'),

),true);

Fijate en el "/" que esta al inicio

Es que nunca se creo variable del modelo alumno.

En vez de utilizar $model

$alumno= new Alumnos;

darle los valores del loadModel (sí funciona igual en todos los controladores)