Passar Parâmetro Prezados, Estou precisando colocar uma condição na função onSearch do meu formulário para quando o usuário for fazer uma buscar ele fazer uma comparação entre variáveis. Alguém já fez algo parecido....
FS
Passar Parâmetro  
Prezados,

Estou precisando colocar uma condição na função onSearch do meu formulário para quando o usuário for fazer uma buscar ele fazer uma comparação entre variáveis. Alguém já fez algo parecido.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (7)


MG

Fernando. o onSearch trabalha basicamente com Session.
O que exatamente você precisa?
FS

estou criando um formulário onde pego a passagem de um Session de login no meu caso eu pego um CPF e quero validar ele antes da busca
para que o usuário somente consiga buscar seu próprio cadastro, fiz alguns testes de segurança e ao inspecionar o código e apagar os dados do campo o usuário consegue buscar todos no banco.
MG

Numa lista, vc poderia incluir esta verificação num TCriteria antes do "load", assim
Antes é preciso ter o campo CPf no cadastro do usuário e capturá-lo no login e
colocá-lo numa Session.

<:?php

public function onReload($param)
{
....
$criteria->add(new TFilter('cpf','=',$TSession::getValue('cpf')));
.....
}

?>


FS

está é a linha em que eu quero passar o parametro.
$btn = $this->form->addAction(_t('Find'), new TAction([$this, 'onSearch']), 'fa:search');
MG

Bem, se está na Session, vc deve alterar o método 'onReload'.

$btn = $this->form->addAction(_t('Find'), new TAction([$this, 'onSearch']), 'fa:search');


Veja que o método onSerach apenas monta todos os filtros necessários para a busca. Ao final ele chama
$this->onReload($param)


A busca de fato ocorre em 'onReload'.. No seu onReload deve ter a linha abaixo:

$objects = $repository->load($criteria, FALSE);


Então você deve adicionar seu filtro antes, assim:

 
  1. <?php
  2. ....
  3. $criteria->add(new TFilter('cpf','=',TSession::getValue('cpf')));
  4. $objects = $repository->load($criteria, FALSE);
  5. ....
  6. ?>




MG

Baseado na estratégia do onSerach, vc pode iniciar a lista, no __construct() com um pré-filtro e chamá-lo no onReload.
Vamos supor que a pessoa precisa ter acesso apenas ao seu registro numa lista, que me parece o seu caso, então vc pode criar um pré-filtro e ao carregar a lista, irá exibir apenas o registro ou registros dela. assim.

O primeiro que passei, basea-se no botão buscar, este aqui se aplica inclusive à lista inicial e qualquer busca que for feito.

Recomento usar este, se for o caso.....

 
  1. <?php
  2. public function __construct()
  3. {
  4. $filtro = new TFilter('cpf','=','TSession::getValue('cpf'));
  5. TSession::setValue('Filtro_inicial', $filtro);
  6. }
  7. public function onReload($param)
  8. {
  9. // antes do load
  10. $criteria->add(TSession::getValue('Filtro_inicial'));
  11. }
  12. ?>
FS

Muito Obrigado deu certinho agora este ultimo código.