Pasar un parámetro opcional a una funcion action

Hola a todos, nuevamente requiero de sus conocimientos…

Quiero pasar un parametro opcional a un action, es decir…

  pubic function actionMy_action(parametro1, parametro2 (ESTE PUEDE SER OPCIONAL, ES DECIR, PUEDE VENIR NULO))


  {


  ..............


  }

muy simple:

por defecto inicializa el parametro con un valor, cuando nadie incluya ese parametro, tomara ese valor por defecto.




public function actionMyAction($parametroObligado,  $otroMasObligado,  $esteEsOpcional=1){

    //

}



Hola… tengo un problemita no encuentro cómo pasarle un parámetro a una función que tengo en el controlador. Especificamente tengo esto:


public function actionGetTextFile($id)

	{

			

		

			$extensiones = array("application/msword"=>"doc","application/pdf"=>"pdf","image/jpeg"=>"jpg");

			

			$id = $_GET['id'];

			$model = tabla1::model()->findByPk($id);

			$content = $model->archivo;


			// header HTML

			header("Cache-Control: public");

			header("Content-Description: File Transfer");

			header("Content-Type: application/octet-stream; ");

			header("Content-Disposition: attachment; filename=edd.txt");

			header("Content-Transfer-Encoding: binary");

			

			//agregar el contenido

			print_r($content);

	}

y en mi vista hago el enlace asi:


echo CHtml::link('Descargar 1',array('tabla1/getTextFile')); echo "<br>";

la idea es pasarle un id para que de acuerdo a ese id me traiga un archivo y me lo descargue

Hola, prueba con esto




<?php

	echo CHtml::link(

		'Descargar',

		Yii::app()->createUrl('tabla1/getTextFile', array('id'=>$id))

	);

?>



Bien!!! Gracias amigo! era lo que buscaba… con esto ya por lo menos ejecuta la función, ahora lo que me falta es que me descargue el archivo o el contenido que quiero, ya que lo que deseo es buscar dentro de una tabla, el contebnido tipo blob que ya guarde allí. Me imagino que debo entonces incrustar dentro de la acción el sql cierto?

Voy a ver cómo lo logro…

Si quieres un código iun poco más bonito puedes probar lo siguiente:




echo CHtml::link('Descargar', array('tabla1/getTextFile', 'id'=>$id));



Oye, estoy tratando de subir un archivo con esto y no funciona. He hecho un ejemplo del foro y no me funciona:




public function actionCreate()

	{

		$model=new archivo;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


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

		{

			$model->attributes=$_POST['archivo'];

			

			$archivo = CUploadedFile::getInstance($model,'contenido');

			$model->nombre = $archivo->name;

			$model->extension = $archivo->type;




			$fp = fopen($archivo->tempName, 'r');

			$content = fread($fp, filesize($archivo->tempName));

			fclose($fp);


			  $model->contenido = $content;


			

			

			if($model->save())

				$this->redirect(array('view','id'=>$model->id_archivo));

		}


		$this->render('create',array(

			'model'=>$model,

		));

	}



Luego voy al form y modifico "fileField" para cargar el archivo:




<div class="row">

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

		<?php echo $form->fileField($model,'contenido'); ?>

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

	</div>



Después voy al create y cargo el archivo sin llenar nombre ni extension y me muestra este error:


Trying to get property of non-object 

y me señala esta línea:


   $model->nombre = $archivo->name;

Más abajo en el Stack Trace

meseñala esta línea tambien:


Yii::createWebApplication($config)->run();



¿qué será lo que estoy haciendo mal?

Buenas!

Cuando definís el widget del formulario le indicás ‘enctype’ como ‘multipart/form-data’?




<?php echo CHtml::beginForm('', 'post', array('enctype'=>'multipart/form-data')); ?>

Saludos!

Ola comunidad,

quisiera saber como le envio los dos parametros al controller

tengo una funcion json que envia el parametro pero solo acepta que envie un solo parametro (o no se como enviar el otro) y solo tiene que ser un numero no me acepta otro caracter

Me podrian ayudar a enviar los dos parametros juntos

De antemano gracias

Pasar más de una variable desde el controlador a la vista es posible siempre que no confundas las comas.

Un ejemplo sencillo pasar dos variables de tipo array a la vista:


$this->render('magazines', array('files_dir'=> $files, 'files_format'=> $files_format_view))

De los tres parámetros que el método ‘render’ del controlador de tipo ‘Controler’ (contenido en la clase ‘CControler’), se deben utilizar únicamente los dos primeros. El primero, para indicar la vista, y el segundo, para los datos (data).


class CController extends CBaseController

{

    ...

    public function render($view,$data=null,$return=false)

	{

        ...

El último de los parámetros no se utiliza y por defecto es false.