Codificar Parametro Da Url

Boa tarde.

Tenho o seguinte problema e não estou a conseguir resolver. Na minha cgridview tenho a opção selectedchanged com o seguinte código:

$this->widget(‘zii.widgets.grid.CGridView’, array(

    'id'=>'form-grid',


    'dataProvider'=>$dataProvider,


  'htmlOptions'=>array('style'=>'cursor: pointer;'),


  'selectionChanged'=>""


    . "function(id){"


    . "window.location='"   


    . Yii::app()->urlManager->createUrl('formularioHistoricoRHPag1/view') . "?id=' +$.fn.yiiGridView.getSelection(id);}",


  'columns'=>array(


     


      array(


          'name'=>'id',


      


      


          


      ),


        'nome',


        array(


            'name'=>'ano',


            'value'=>'MomentoAvaliacao::model()->findByPk($data->id_momento_avaliacao)->ano',


        )

),

));

Eu preciso que o id ao ser passado na url seja codificado, como posso fazer isso?

Não sei porque, mas estou a achar que o forum descrimina alguns novatos(as), pois cada vez que peço ajuda não existe ninguém que me consiga responder.!!!

Olá Marisalima,

Sou novato também, mas vou tentar te ajudar… O que você quer dizer exatamente com "Eu preciso que o id ao ser passado na url seja codificado", o que seria exatamente esse "codificado"?

Olá marisalima.

Não creio que exista discriminação nos fóruns.

Pelo que eu entendi, você não quer expor o id do usuário.

Se for isto, você pode criar um campo chave na tabela usuário e, ao cadastrar um usuário, criar uma chave para ele, por exemplo, sha1(emailDoUsuario), que criará um número hexadecimal de 40 caracteres.

Desta forma, ao invéz de passar o id do usuário, pode passar esta chave.

Se quiser garantir que esta chave não se repita, crie este campo como unique no banco e faça os tratamentos devidos ao salvar.

Pode também criar uma chave e concatenar com o id do usuario e, ao recuperar o id, descartar a chave através de substring. Exemplo: id=1; chave=#98&7@6 idChave=1#98&7@6

Marisa,

Como muitos aqui, temos nossas ocupações fora do fórum. Como pode ver, você respondida, mais não retorno para dar resposta.

Se você sabe programar, saberia que não tem como codificar uma variável ou esconder na URL, o que se pode fazer e converter esse variável em uma combinação de caracteres e depois reverter essa combinação quando for receber ela.

Você pode usar o base64_encode() e o base64_decode() do próprio PHP, ou seguir a sugestão do Roberson que também é viável e mais segura, que não tem como decriptar um sha1().

Em primeiro lugar obrigada pela resposta.

Caro Newerton,

sei muito bem que posso utilizar o base64_encode e base64_decode em php a minha questão é fazer isso ao utilizar código javascript num Cgridview onde crio uma url que passo o id da grid. Aí está o meu problema e não no PHP.

Vou seguir a sugestão do roberson e assim que tiver uma solução coloco.

E já agora não respondi porque estive ausente do trabalho e nas duas próximas semanas vou de férias!

Obrigada a todos.

Newton, muito boa sugestão. Agora me surgiu uma dúvida: tem como definir essa encriptação base64 como default??

Veja só, eu acesso a página do concurso com o ID 1 dessa forma: ?r=concurso/ver&conc_id=1

Eu gostaria que sempre que o Yii criasse esse link (no caso o conc_id=1) ele codificasse o ID do concurso, no caso o 1, ficando conc_id=MQ==, por exemplo.

No ConcursoController.php eu mudo a function actionVer($conc_id) e coloco lá o base64_decode.


public function actionVer($conc_id)

    {

    	$codigo = base64_decode($conc_id);


        return $this->render('ver', [

            'model' => $this->findModel($codigo),

        ]);

    }

Tem como??

@José,

Pelo conceito do MVC esse tipo de coisa deve ser feita no model.

Suspeitei desde o princípio… :rolleyes: ;D :D

vlw Calcio…