Objeto e Sessão em php

Estou em duvida de como usar objetos em sessão no PHP e vi que tem outros tópicos sobre esse assunto mas não tiraram minha duvida.

Já li sobre serialize() e unserealize() mas acho que não entendi direito como usar.

No meu projeto eu passo um objeto para sessão e quando vou acessar esse objeto da um erro., dei um var_dump() nele e o objeto fica como _php_incomplete_class
Não estou conseguindo usar esse objeto.

Alguém poderia me explicar melhor?

1 curtida

poste o código! sem código ficamos se saber o real problema

1 curtida

Tem bastante código. vou tentar colocar as partes especificas.

<?php
namespace App\Controllers;

use App\Models\DAO\UsuarioDAO;
use App\Models\DAO\AtividadeAcademicaDAO;
use App\Lib\Sessao;
use App\Models\Entidades\TipoDissertativa;
use App\Models\DAO\TipoDissertativaDAO;

class CadastroQuestaoController extends Controller{
    
    
    private $usuario;
    private $atividadeAcademicaDAO;
    private $usuarioDAO;
    
    
    private function initCadastro(){
        $this->usuarioDAO = new UsuarioDAO();
        $this->atividadeAcademicaDAO = new AtividadeAcademicaDAO();
        $this->usuario = $this->usuarioDAO->findById($_SESSION['id']);
        
        $this->usuario->setAtividadesAcademicas($this->atividadeAcademicaDAO->findAtividadesAcademicasByUsuario($_SESSION['id']));
        if(isset($_SESSION['atividadeAcademicaAtual'])) {
            $_SESSION['atividadeAcademicaAtual'] = $this->usuario->getAtividadesAcademicas()[0];
        }
    }
    
    public function dissertativa() {
        $this->initCadastro();
        
        $this->setViewParam('atividadesAcademicas', $this->usuario->getAtividadesAcademicas());
        if(isset($_SESSION['novaAtividade'])){
            $_SESSION['atividadeAcademicaAtual'] = $_SESSION['novaAtividade'];
            unset($_SESSION['novaAtividade']);
        }
        $this->render('/cadastro/dissertativa');
        
        Sessao::limpaMensagem();
    }
    
    public function alteraAtividadeAcademica() {
        $atividadeAcademicaDAO = new AtividadeAcademicaDAO();
        
        $_SESSION['novaAtividade'] = $atividadeAcademicaDAO->findById($_POST['idAA']);
        var_dump(unserialize($_SESSION['novaAtividade']));var_dump($_SESSION['atividadeAcademicaAtual']);
        //$this->redirect('/cadastroquestao/dissertativa');
    }
    
}

Eu tento usar essa sessão aqui:

<div class="col-md-6">
              <h1>
              	<?php echo isset($_SESSION['atividadeAcademicaAtual']) ? $_SESSION['atividadeAcademicaAtual']->getDescricao() : "Não está vinculado a uma Atividade Acadêmica";?>
              </h1>
              </div>

Consegui resolver.

class Sessao {
    
    public static function setAtitivadeAcademicaAtual($atividade){
        $aux = serialize($atividade);
        $_SESSION['atividadeAcademicaAtual'] = $aux;
    }
    
    public static function getAtividadeAcademicaAtual(){
        $aux = unserialize($_SESSION['atividadeAcademicaAtual']);
        return $aux;
    }

Controller :

private function initCadastro(){
        $this->usuarioDAO = new UsuarioDAO();
        $this->atividadeAcademicaDAO = new AtividadeAcademicaDAO();
        $this->usuario = $this->usuarioDAO->findById($_SESSION['id']);
        
        $this->usuario->setAtividadesAcademicas($this->atividadeAcademicaDAO->findAtividadesAcademicasByUsuario($_SESSION['id']));
        if(!isset($_SESSION['atividadeAcademicaAtual'])){
            Sessao::setAtitivadeAcademicaAtual($this->usuario->getAtividadesAcademicas()[0]);
        }
        
    }

public function alteraAtividadeAcademica() {
        $atividadeAcademicaDAO = new AtividadeAcademicaDAO();
        
        Sessao::setAtitivadeAcademicaAtual($atividadeAcademicaDAO->findById($_POST['idAA']));
        $this->redirect('/cadastroquestao/dissertativa');
    }

Front:

<div class="col-md-6">
              <h1>
              	<?php echo isset($_SESSION['atividadeAcademicaAtual']) ? Sessao::getAtividadeAcademicaAtual()->getDescricao() : "Não está vinculado a uma Atividade Acadêmica";?>
              </h1>
              </div>   
		</div>
2 curtidas