Rotinas Customizadas – Backend

Uma das premissas para esse tutorial é o conhecimento sob Pontos de Entrada, caso ainda não conheça, segue o link abaixo:

Pontos de Entrada

Para customizar rotinas em PHP deverá ser criada a seguinte estrutura de pastas no diretório webservice do BP:

Onde:

EspecíficosDiretório raiz das customizações, sem ele os demais diretórios/arquivos não são localizados

Especificos -> ControllerTodos os arquivos responsáveis por conter a lógica da aplicação, bem como direcionamento das rotas. Exemplo:


    <?php use \Sys\App; class Exemplo_Frisokar_Controller extends \Sys\Controller { function salvar($url_params) { //Obtendo os parâmetros $nome_completo = $this->ReadPost('nome_completo',null);

        //Carregando os models
        $exemplo_frisokar_model = $this->LoadModel('Exemplo_Frisokar', true);

        //Setando os valores do model
        $exemplo_frisokar_model->nome_completo = $nome_completo;
        
        try {
            $exemplo_frisokar_dao = $this->LoadDAO('Exemplo_Frisokar', true);
            $ret = $exemplo_frisokar_dao->insert($exemplo_frisokar_model);

            $this->print_json($ret);
        }
        catch (BusinessException $e) {
            $this->print_json($e);
        }
    }

    function listar($url_params){

        // valida token
        $sessao_model = \Sys\Sessao::objeto(self::$instance_token);
        // valida permissões
        \Sys\Permissions::verificar(App::$emp, $sessao_model->dados->permissoes, array('gestao_projetos', 'agenda'));

        // instancio o projeto
        $exemplo_frisokar_dao = $this->LoadDAO('Exemplo_Frisokar', true);

        try {
            $lista = $exemplo_frisokar_dao->listar();
            $this->print_json($lista);
        }
        catch (BusinessException $e) {
            $this->print_json($e);
        }  
    }
}
  

Especificos -> DAOTodos os arquivos responsáveis por manipular/gerenciar informações do banco de dados. Exemplo:


<?php 

use \Sys\DAO; 
use \Sys\DB; 

class Exemplo_Frisokar_DAO extends DAO { 

    function insert($exemplo_frisokar_model) { 
        $sql = "INSERT INTO sua_tabela ( campo_1, campo_2 ) VALUES ( :nome_completo, :conteudo_2 ) "; 

        $params[':nome_completo'] = $exemplo_frisokar_model->nome_completo;

        //Trecho responsável por executar a query
        //$query = Sys\DB::exec($sql, $params);

        return $params;
    }


    function listar()
    {
        $sql = "SELECT
                    id,
                    nome,
                    cor
                FROM agenda_tipo
                WHERE excluido = 'N'
                LIMIT 0, 4";

        $params = array();

        $query = DB::query($sql, $params);
    
        return $query;
    }
}

Especificos -> ModelTodos os arquivos responsáveis por conter as estruturas de campos do BD bem como suas validações. Exemplo:


<?php 
use \Sys\Model; 
use \Sys\Validation; 

class Exemplo_Frisokar_Model extends Model { 

    public $nome_completo; 
    
    function __construct() { 
       parent::__construct(); 
    } 
    
    function validation() { 
       $validation = new Validation(); 
       
       if (strlen($this->nome_completo) == 0 || is_null($this->nome_completo)) {
           $validation->add(Validation::VALID_ERR_FIELD, 'Informe o nome completo');
       }

       return $validation;
    }
}

Especificos->RoutesResponsável por gerenciar todas as rotas de arquivos customizados, fazendo com que conversem entre si e com os arquivos padrões do BP. Deve seguir a estrutura abaixo:


<?php 
     class RouteMapEspecifico_Config extends \Sys\RouteMap
     {
         static function adicionarRotas()
	 {
	     $rotas_especificas = array(
		'/exemplo_frisokar/salvar/' => array('Exemplo_Frisokar', 'salvar'),
		'/exemplo_frisokar/listar/' => array('Exemplo_Frisokar', 'listar')
	     );

             return $rotas_especificas;
         }
     }