FF
Preenchimento automático de informação da sessão
Olá pessoal,
Preciso buscar da sessão dados do usuário logado e que tais dados sejam carregados no formulário em questão ao ser acionado.
A situação é a seguinte, sempre que o usuário acessar o formulário os dados como nome, email, telefone, etc.. sejam carregados no formulário sem a opção de edição(os campos serão configurados para não serem editáveis).
Alguma ideia para que eu possa faze-lo? Esta logica seria aplicada as datagrids e formulários.
As informações ja estão na tabela system_user.
Antecipadamente agradeço.
Preciso buscar da sessão dados do usuário logado e que tais dados sejam carregados no formulário em questão ao ser acionado.
A situação é a seguinte, sempre que o usuário acessar o formulário os dados como nome, email, telefone, etc.. sejam carregados no formulário sem a opção de edição(os campos serão configurados para não serem editáveis).
Alguma ideia para que eu possa faze-lo? Esta logica seria aplicada as datagrids e formulários.
As informações ja estão na tabela system_user.
Antecipadamente agradeço.
No onEdit do formulário quando não existe um parâmetro de busca ele chama $this->form->clear() isso faz limpar o form.
Logo abaixo, você pode fazer o seguinte:
Olá Marcelo, mais uma vez obrigado pelo apoio!
Então, no casodo formulário em questão, os dados seriam carregados ao abrir para um Novo preenchimento, neste caso, seria informado o que passou no metodo onnew por exemplo?
Grato.
O padrão que FW usa é sempre criar no form um onEdit.
No início do método é verificado se foi passado um $param['key'].
Mas não necessariamente deve ser isso.
No seu caso me parece que você criou o método onNew.
O conceito que passei se aplica muito bem em ambos.
Abraços e sucesso!
Considerando uma classe que ja fazia uso e adaptando o que me disse, ficaria mais ou menos como abaixo?
Aplicando o exemplo acima, ao abrir o formulário os campos o campo do usuário/cliente não é carregado, algo que fiz errado?
No seu código você já possui o $object que será enviado ao form.
Portanto você pode adicionar as informações no mesmo $object, desde que o nome do campo exista na tela.
Ao invês de :
Use:
<:?php
// cliente - deve ser definido no __construct = $cliente = new TEntry('cliente');
$object->cliente = TSession::getValue('username'); // lembrando que o nome é o mesmo do fomulario
$this->form->setData($object);
?>
O nome fantasia que você comenta está sendo armazenado na Session em Loginform?
Se estiver, é só recuperar e exibir usando o mesmo conceito acima.
Entendi.
Quanto ao nome fantasia é um campo da tabela de usuário, onde também está o campo de $name que representa o usuário da sessão. Gostaria que com base na sessão e no usuário, pudesse acessar este campo para preencher o campo $cliente. Como é feito em alguns metodos com onExitAction. Porém diferentemente, seria preenchido sempre que o formulário fosse aberto para um novo preenchimento.
Entendeu?
Entendi.
Segundo que te passei, você conseguiu o que queria ou ainda não?
Não, ainda não deu. Porque no caso por estar no metodo onEdit, este precisa ser chamado ao acessar o formulário, e o que preciso é assim que a classe for acionada, estes campos entrem preenchidos com os dados da sessão. Tipo como o metodo onShow, sabe?
Deixei assim, mas ainda não tive o resultado esperado.
Você deve colocar no "else" do if (isset($param['key]))"...
Analisando melhor, estas informações sempre devem ser exibidas, certo?
Então faça o sequinte:
Opa, começo a dar resultado. O usuário da sessão preencheu o campo $cliente quando acessado o metodo onEdit, ou seja localhost/landini/index.php?class=GarantiaForm&method=onEdit, mas se acessado só a classe como localhost/landini/index.php?class=GarantiaForm ainda fica em branco.
Os demais campos eu posso chamar com
Por exemplo, certo?
Quando vc chama GarantiaForm, você chama algum método?
É importante saber que o Adianti sempre chama o __construct() em primeiro lugar.
Sempre deve chamar um form atra´ves de um método de entrada.
Neste método, geralmente o onEdit ou outro que você criar, você deverá preencher o conteúdo, ou vindo do BD ou da Sessão.;
Mas respondendo sua pergunta: Sim, o processo é o mesmo. Sempre lembrando que o campo que fizer referência deve exisitr no form, por exemplo: $email = new TEntry('email') e assim por diante.
Deu certo em partes. Coloquei o trecho de cogido no contrutor e agora sempre que acessado o formulário é carregado o campo.
Agora é carregar os campos email,telefone e etc baseado no dado do campo carregado na sessão(username).
Ficou assim agora no construtor e funciona para o campo cliente, agora só preciso filtrar e carregar os outros com base no campo cliente.
Os campos do formulário foram criados da seguinte maneira:
Mais uma vez, quero agradeçer a força Marcelo, está sendo esclarecedor.
É só seguir os mesmos passos.
Mas é preciso que os dados sejam colocados na Session durante o login.
Para acessar o e-mail do usuário logado, é só utilizar: $this->obj->email = TSession::getValue('email') e assim por diante.
Dê uma olhada no Controller LoginForm, método onLogin e veja quais campos estão sendo enviados para Session. Você poderá adicionar novos, se precisar.
Marcelo primeiramente agradeço por todo tempo prestado para solução aqui do meu problema. Muito obrigado.
Fiz uma busca nas classes admin do FW e encontrei um trecho de codigo usado para edição do perfil.
Trecho até pequeno, veja:
Então dei um
Agora os campos do formulário são preenchidos com os dados do usuário logado!
Menos um problema, agora é continuar e homologar.
Mais uma vez obrigado.
Opa, que bom.
Se precisar de ajuda, é só falar.
meu e-mail: marcelo@mgsistemas.com.br