Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia caros colegas,
estou aprendendo ZF2, gostando muito inclusive, mas estou tendo dificuldade para ler uma session criada pelo Zend\Authentication\Storage\Session, fiz um módulo de login que ta funcionando legal , eu escrevi a sessão da seguinte maneira:
namespace Login\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Login\Form\Login as LoginFrm;
use Zend\Authentication\AuthenticationService;
use Zend\Authentication\Storage\Session;
public function indexAction() {
$form = new LoginFrm();
$error = false;
$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
$data = $request->getPost()->toArray();
$auth = new AuthenticationService();
$session = new Session('Login');
$auth->setStorage($session);
$authAdapter = $this->getServiceLocator()->get('Login\Auth\Adapter');
$authAdapter->setUsuario($data['email'])
->setPassword($data['senha']);
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
$session->write($auth->getIdentity()['user'], null);
return $this->redirect()->toRoute('application');
} else {
$error = true;
}
}
}
No $session->write estou passando a minha entidade user que contém todos os dados do usuário que fez login, se eu der um var_dump($session->read()) e consigo visualizar os dados mas não consigo acessá-los como um array, então não consigo acessar somente o nome, ou somente o id, como utilizar essa session em outros locais do meu projeto?
Obrigado!
Não funcionou, deve ter mudado alguma coisa nessa versão... vou continuar testando, de qualquer forma obrigado pela ajuda!
Usando print_r($session->read()).. o que ele retorna!?
Abs
Ainda neste trecho
$session->write($auth->getIdentity()['user'], null);
vc esta pegando somente a coluna user do BD tente assim:
$session->write($auth->getIdentity());
Na verdade o ['user'] se refere a minha entidade, tabela usuários completa, consegui acessar as propriedades da seguinte maneira:
$session->read()->nomedocampo;
Esta retornando os valores perfeitamente mas apenas dentro da classe que foi criada.
Agora não sei como acessar esses valores em outras classes, sendo que em teoria sendo uma session deve poder ser acessada em qualquer local.
tem que instanciar o service isso no Module.php ex:
public function getServiceConfig() {
return array(
'factories' => array(
'Zend\Authentication\AuthenticationService' => function($serviceManager) {
return $serviceManager->get('Login\Auth\Adapter');
},
),
);
}
se quiser aqui tem um totorial:
Eu não sei se ainda funciona da mesma forma do ZF2, mas no ZF1 tive um problema para acessar os dados do usuário.
Consegui resolver fazendo uma instância da autenticação:
$auth = Zend_Auth::getInstance()->getStorage()->read();
//Exemplo
Com a instância $auth, consegui acessar todos os dados.
* Ele instanciava do arquivo Zend_Auth, que era o padrão de autenticação. Só não sei se ainda é assim.