Skip to content

Instantly share code, notes, and snippets.

@ribafs
Last active August 29, 2019 22:02
Show Gist options
  • Save ribafs/c0f8c0b0452ba712bd203e0ac1c32474 to your computer and use it in GitHub Desktop.
Save ribafs/c0f8c0b0452ba712bd203e0ac1c32474 to your computer and use it in GitHub Desktop.
Receber variável em classe
Dúvida sobre Orientação a Objetos em PHP
Estou agora tentando customizar/melhorar o pequeno aplicativo em MVC:
https://github.com/ribafs/mini-mvc
Tenho uma classe ClientesController abaixo:
https://github.com/ribafs/mini-mvc/blob/master/app/Controller/ClientesController.php
Ela tem um método index() mostrado abaixo
public function index()
{
// Instance new Model (Customer)
$Customer = new Customer();
// getting all customers and amount of customers
$customers = $Customer->getAllCustomers();
$amount_of_customers = $Customer->getAmountOfCustomers();
// load views. within the views we can echo out $customers and $amount_of_customers easily
require APP . 'view/_templates/header.php';
require APP . 'view/clientes/index.php';
require APP . 'view/_templates/footer.php';
}
Os requires renderizam a view clientes. Acho meio estranho este uso dos requires aqui e gostaria de criar uma classe View() como abaixo:
<?php
namespace Mvc;
class View{
public function __construct($name){
require APP . 'view/_templates/header.php';
require APP . 'view/'.$name.'/index.php';
require APP . 'view/_templates/footer.php';
}
}
E usar esta classe para substituir os requires, assim:
use Mvc\View;
E no método index() troquei os requires pela instância de View():
$view = new View('clientes');
Acontece que a view index:
https://github.com/ribafs/mini-mvc/blob/master/app/view/clientes/index.php
usa duas variáveis locais do método index (ver acima) que ficam logo acima dos requires e não estou conseguindo passar estas variáveis para a classe View para que a view index as receba.
Por favor, como faço isso?
Espero que tenha ficado claro, caro não tenha ficado posso esclarecer.
@ribafs
Copy link
Author

ribafs commented Aug 28, 2019

Resolvido:

Na view, passei as duas variáveis locais do método do Controller e os recebi no construtor com o mesmo nome:
class View{

public function __construct($name,$amount_of_clientes, $clientes){

    require APP . 'view/_templates/header.php';
    require APP . 'view/'.$name.'/index.php';
    require APP . 'view/_templates/footer.php';
}

}

No Controller

	$view = new View('clientes',$amount_of_clientes,$clientes);

Beleza, então assim as duas variáveis estão disponíveis na view clientes, como estavam antes.
Obrigado aos colegas Marco Antônio e Cesinha Gutierres. Valeu.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment