How to pass objects between controllers in MVC using POO

Asked

Viewed 531 times

1

Basically, I need to be login successful to save the username in a variable and use it in another controller.

Model.php:

   public function login($email, $password) {
    session_start();

    $sql = "SELECT * FROM users WHERE email = :email AND password= :password;";
    $query = $this->db->prepare($sql);

    $parameters = array(':email' => $email, ':password' => $password);
    $query->execute($parameters);
    $rows = $query->fetch(PDO::FETCH_NUM);

    if($rows > 0) {
        header ("Location: " . URL . "home");
    } else {
        exit ('Email or password incorrect');
    }
}

Controller.php

  public function login() {
    if (isset($_POST['login_submit']) AND isset($_POST['email']) AND isset($_POST['password'])) {
        $this->model->login($_POST['email'], $_POST['password']);
    }
}
  • Controller for controller then would be HMVC, in classic MVC it is only a controller. Show what you have or which FW you are using for ease.

  • I’m using a framework that I developed myself, I can’t post it here because it’s a private project.

  • Right, but what information do you want to pass on and where to'?

  • I want to pass the user name that is within a function to another function.

  • So you’re not a controller? Usually the controller invokes a class - component - responsible for user authentication and the information transitions easily. Without knowing what you have, you can’t help much. Show a generic example at least.

  • I just edited the code (Code of the.php model): If login is right, pass the user name into a variable and use it in another controller

Show 1 more comment

1 answer

2


It wasn’t explicit but it looks like you want it sent by session. So you can just set in session and take it back in the other control.

<?php
// declaração da classe Pessoa
class Pessoa {
    public $nome;
}


// No Controller que envia os parametros
session_start();
$joao = new Pessoa();
$joao->nome = "João";
$_SESSION['pessoa'] = $joao;


// No Controller que recebe os dados
session_start();
$joao = $_SESSION['pessoa'];
print_r($joao);

Or if you want to standardize this and play in the object orientation paradigm

<?php

// controller que envia 
$joao = new Pessoa();
$joao->nome = "João";
SessionUtils::setPropriedade('pessoa', $joao);

// controller que recebe 
$joao = SessionUtils::getPropriedadeLimpar('pessoa');
print_r($joao);


// declaração da classe Pessoa
class Pessoa {
    public $nome;
}

// classe util para a sessão
class SessionUtils {

    private static $BASE_PROPRIEDADES = "props";

    /**
     * Pega uma propriedade da sessão 
     * @return a propriedade ou null se não existir
     */
    public static function getPropriedade($nome){
        self::configurarSessao();
        $sessao = self::getSessao();
        return @$sessao[$nome];
    }

    /**
     * Pega uma propriedade da sessão e depois a exclui da mesma
     * @return a propriedade ou null se não existir
     */
    public static function getPropriedadeLimpar($nome){
        self::configurarSessao();
        $sessao = self::getSessao();
        $valor  = @$sessao[$nome];
        self::setPropriedade($nome, null);
        return $valor;
    }

    /**
     * Seta uma propriedade na sessão
     */
    public static function setPropriedade($nome, $valor){
        self::configurarSessao();
        $_SESSION[self::$BASE_PROPRIEDADES][$nome] = $valor;
    }

    /**
     * Configura a sessão para guardar os itens
     */
    private static function configurarSessao(){
        if(!isset($_SESSION)){
            session_start();
        }
        if(!self::getSessao() || !is_array(self::getSessao())){
            self::setSessao(array());
        }
    }

    private static function getSessao(){
        return $_SESSION[self::$BASE_PROPRIEDADES];
    }

    private static function setSessao($valor){
        $_SESSION[self::$BASE_PROPRIEDADES] = $valor;
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.