As Camadas Model e Controller - Entendendo o padrão MVC na prática – Parte 06 Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 3 anos, 2 meses, 1 dia atrás.

E vamos começar a parte legal, construir nosso controller e model.

O controller master

Vamos precisar carregar o model e a view a partir do controller e isso é uma coisa chata de ficar repetindo, por isso vou usar aqui o Master_Controller para carregar as outras, este seria o "motor" do nosso controller, no fim ele será extendido pelo controller carregado pelo roteamento.

Crie o arquivo LibraryErikCoreMasterController.php com o seguinte conteúdo:

Gostou deste artigo?

Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!

<?php

namespace ErikCore;

class Master_Controller
{

    Use ErikUtilitiesRequest;

    public $request;
    public $mvc;
    public $model;
    public $view;

    public function __construct($returnMvc)
    {

        $this->mvc=$returnMvc;

        $modelName=$this->mvc['model'].'_Model';
        $this->model=new $modelName($returnMvc);

        $this->view=new Master_View($returnMvc);

    }

}

Prontinho, note que ele está carregando o trait request e também armazenando os nomes das classes do MVC em uma var chamada $mvc (acessada alí via $this->mvc) e por final carregamos o model (em $model) requisitado e MasterView (em $view), essa classe MasterView vai servir pra carregar nosso sistema que irá gerar o HTML, mas isso só na próxima aula.

Com isso já temos então em todas as classes que estenderem o MasterController o model definido, a view e as funções do nosso trait request, vamos então aprtir para a MasterModel.

O model master

Esse é o cara que irá preparar nosso model original preparando a conexão ao banco de dados, para tal vamos usar tabelas com o mesmo nome do model, porém tratado com o slug do trait Inflector que criamos, além disso vamos precisar do Config para pegarmos as configurações do banco de dados.

Crie o arquivo LibraryErikCoreMasterModel.php com o seguinte conteúdo:

<?php

namespace ErikCore;

use AppCoreConfig;

class Master_Model
{

    use ErikUtilitiesInflector;

    public $mvc,$table;
    protected $inflector,$db,$mysql;


    public function __construct($returnMvc)
    {

        $config = new Config();
        $db = $config->database;

        $this->table = $this->slug($returnMvc['model'], '_');
        if (isset($this->configs['table'])) {
            $this->table=$this->configs['table'];
        }
        if ($this->table) {
            $data_source='ErikCoreMasterDb_'.$db['tipo'];
            $this->db=new $data_source($db,$this->table);
        }

    }

}

Fácil, após declaramos os atributos (variáveis) e o trait Inflector eu chamo o meu contrutor (__construct()) que irá carregar o arquivo de configurações e na sequência descobrir o nome da tabela do banco de dados usando o slug e armazenando o valor em $table ($this->table alí na função), também verifico que existe o atributo $configs com uma chave 'table' ($this->configs['table']) e assim personalizar o nome da tabela no model carregado, se existir eu armazeno o valor, o segundo if vai verificar se o valor não é falso (no $configs['table'] você pode setar false e desabilitar o banco de dados), se um nome de tabela existir em $table carregamos o banco de dados (que ainda não criamos, só na 8ª e 9ª aula faremos isso).

Adiantando as coisas

E pra adiantar um pouco vamos criar o arquivo do view master em LibraryErikCoreMasterView.php

<?php

namespace ErikCore;

use AppCoreConfig;

class Master_View
{
}

E prontinho, na próxima aula veremos o que esta classe fará.

Próxima aula

Na próxima aula vamos ver como carregar um arquivo de template, como enviar variáveis do controller para a view e como carregar o conteúdo do template, falta pouco pra terminarmos.

Aqui os arquivos desta aula e o estudo completo.


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!