Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nerdmonkey

Criando sistema com MVC

Recommended Posts

Bom dia. Vejam se conseguem me ajudar.

Estou criando um sistema MVC utilizando o mesmo esquema do Weslley da Code Education.

 

Esquema das pastas

 

/App

=> Controllers

- Home.php

=> Models

- Não há necessidade por enquanto, porque ainda não consigo interagir com essa camada

=> Views

-> Index

- home.phtml

- layout.phtml

=> Init.php

 

/public

- index.php

- .htaccess

 

/vendor

=> composer

=> SON

-> Controller

- Action.php

-> DB

- Table.php

-> DI

- Container.php

-> Init

- Bootstrap.php

=> autoload.php

 

Os arquivos

 

App\Controllers\Home

namespace App\Controllers;



use SON\Controller\Action;

use \SON\DI\Container;



class Home extends Action

{

// homepage

public function home()

{

$this->render('home');

}

}

App\Views\layout.phtml

<html>
<head>

<meta charset="utf-8">

<title>MVC</title>

<link rel="stylesheet" media="screen" href="../App/Views/css/style.css">

</head>

<body>

<section class="content">



<?= $this->content(); ?>



</section>

</body>

</html>

App\Views\Index\home.phtml

<h1>Página inicial da nossa aplicação</h1>

App\init

namespace App;


use SON\Init\Bootstrap;



class Init extends Bootstrap 

{

protected function initRoutes()

{

/** Define the panel route */

$ar['home'] = ['route' => '/', 'controller' => 'home', 'action' => 'home'];



$this->setRoutes($ar);

}



public static function getDb() 

{

$db = new \PDO("mysql:host=localhost;dbname=dbtest","root","");

return $db;

}

}

public\index

require_once '../vendor/autoload.php';



$init = new \App\Init;

vendor\SON\Controller\Action

namespace SON\Controller;



class Action

{

protected $view;

protected $action;



public function __construct() {

$this->view = new \stdClass;

}



public function render($action, $layout = true) {

$this->action = $action;

if($layout == true && file_exists("../App/Views/layout.phtml")):

include_once '../App/Views/layout.phtml';

else:

$this->content();

endif;

} 



public function content() {

$atual = get_class($this);

$singleClassName = strtolower(str_replace("App\\Controllers\\", "", $atual));

include_once '../App/Views/' . $singleClassName . '/' . $this->action . '.phtml';

}

}

vendor\SON\DB\Table - Não é importante agora porque, como disse lá em cima, não faço a interação com a Model ainda

 

vendor\SON\DI\Container

namespace SON\DI;



class Container

{

public static function getClass($name)

{

$str_class = "\\App\\Models\\" . ucfirst($name);

$class = new $str_class(\App\Init::getDb());

return $class;

} 

}

vendor\SON\Init\Bootstrap

namespace SON\Init;



abstract class Bootstrap

{

private $routes;



public function __construct()

{

$this->initRoutes();

$this->run($this->getUrl());

}



abstract protected function initRoutes();



protected function run($url) 

{

array_walk($this->routes, function($route) use($url){

if($url == $route['route']){

$class = "App\\Controllers\\" . ucfirst($route['controller']);

$controller = new $class;

$controller->$route['action']();

}

}); 

}



protected function setRoutes(array $routes) 

{

$this->routes = $routes;

}



protected function getUrl() 

{

return parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);

}

}

O autoload das classes é feito pelo composer e parece estar tudo certo.

Estou começando agora a trabalhar com MVC e o pior erro é o que não mostra nenhum resultado, não sei por onde seguir ou buscar a solução. Fiz diversas revisões e isso me ajudou até entender melhor o conceito e a estrutura do projeto. Setei a rota, criei a classe no controller da APP que faz o render do html, porém nada é impresso na tela.

 

Agradeço a quem puder dedicar um tempinho pra me ajudar a solucionar esse problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como estão as configurações de exibição de erro no php.ini? De uma verificada no log do apache também. Talvez tenha algo passando despercebido.

 

Como está a definição do autoload no composer.json?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Gariel já tentei exibir os erros assim

 

 

error_reporting(E_ALL);
ini_set('display_errors', 1);

 

Mas não retorna nada

\public

error_reporting(E_ALL);
ini_set('display_errors', 1);

require_once '../vendor/autoload.php';

$init = new \App\Init;

 

o composer.json está assim

 

{
"name": "son/mvc",
"require": {
"php": ">=5.3"
},
"description": "mvc project",
"minimum-stability": "stable",
"license": "proprietary",
"autoload": {
"psr-0": {
"SON": "vendor",
"App": "/"
}
},
"authors": [
{
"name": "author's name",
"email": "email@example.com"
}
]
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se houver algum erro de parser, o seu código de exibição de erros não funcionará. Por isso precisa alterar no php.ini.

 

Seu autoload não parece estar correto. Além do mais, utilize o autoload psr-4. Segue o exemplo:

{
    "autoload": {
        "psr-4": {
            "App\\": "App/",
            "SON\\": "vendor/SON/",            
            "": "" //fallback conforme as pastas
        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim está correto?

{
"name": "son/mvc",
"require": {
"php": ">=5.3"
},
"minimum-stability": "alpha",
"autoload": {
"psr-4": {
"App\\": "App/",
"SON\\": "vendor/SON/"
}
},
"config": {
"bin-dir": "bin"
}
}

Não estudei a fundo sobre as psr- mas entendi que são padrões de organização das classes dentro do meu programa, estou certo?

 

Notei que a psr-4 inclui e escapa a barra.

 

Também alterei o php.ini e defini

 

error_reporting=E_ALL;

 

A aplicação continua não exibindo nenhum erro na tela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na PSR-0 era uma obrigatoriedade todo o namespace ser uma pasta, mesmo que o vendor, em conjunto com os subnamespaces, fossem extenso, deveria existir uma pasta para ele.

 

Ja na PSR-4, essa obrigatoriedade foi removida. Você adiciona um namespace como prefixo (caso ele não exista como um file path) e, o restante, segue a mesma lógica da PSR-0 (criação de pastas para os namespaces).

 

Na PSR-0 era opcional, na PSR-4 é obrigatório.

 

Nos links abaixo há alguns exemplos:

http://seld.be/notes/psr-4-autoloading-support-in-composer

http://www.php-fig.org/psr/psr-4/meta/

Compartilhar este post


Link para o post
Compartilhar em outros sites

^^ acabei de lê-los por alto, meu inglês ainda não está 100%.

Esses são padrões atuais válidos para se desenvolver frameworks?

O zend2, por exemplo, trabalha dessa maneira? Siginifica que devo sempre trabalhar com essa organização e nomenclatura de pastas para projetos web? Isso ai é o famoso padrão MVC na prática?

 

São apenas algumas dúvidas rs...

A forma como as tarefas são dividas e delegas aos responsáveis é fascinante.

Fazia do meu jeito, um pouco diferente, não desorganizado, mas pelo que vi, trabalhar sobre documentações torna tudo mais fácil e simples de implementar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esses são padrões atuais válidos para se desenvolver frameworks?

Sim, são. Mas sempre estão em constante atualização. O PSR-4 eu utilizo. Já PSR-1 e PSR-2 não são do meu gosto.

 

Lembrando que são dicas e conselhos da comunidade PHP. O que mais vale é o que você, em conjunto com sua equipe de desenvolvimento determinam.

 

O zend2, por exemplo, trabalha dessa maneira? Siginifica que devo sempre trabalhar com essa organização e nomenclatura de pastas para projetos web?

Para utilizar o autoload corretamente, deve utilizar aquela nomenclatura. Ainda há a inclusão do "_" (underline/underscore), que seria o padrão antes do PHP 5.3 de nomenclatura de classes portado para o mundo dos Namespaces. Sei que o Zend utiliza o autoload do composer, que é baseado na PSR. Agora não sei dizer se o Zend utiliza tudo de acordo com a PSR-4 ou se utiliza de forma mesclada (o que é possível).

 

Isso ai é o famoso padrão MVC na prática?

Não. O MVC, padrão arquitetural, é conhecido por promover a organização de código. Entretanto, apenas a organização, não garante que seja um código em MVC.

 

A questão de nomenclatura e namespaces é voltado mais para as questões de pacotes. No link abaixo há uma boa explicação sobre os pacotes:

http://forum.imasters.com.br/topic/448099-resolvidonamespace/?p=1772073

 

Por exemplo, no artigo que eu escrevi uns meses atras, disponibilizei, através do composer, utilizando a definição da PSR-4:

http://forum.imasters.com.br/topic/537066-tutorial-integridade-de-colecoes-com-uso-de-iterator/

 

Aqui você encontra o repositório do projeto: https://bitbucket.org/harbingerproject/iterator

Ainda quero lançar mais, até um sobre como disponibilizar no composer/packagist.

 

 

São apenas algumas dúvidas rs...

A forma como as tarefas são dividas e delegas aos responsáveis é fascinante.

Fazia do meu jeito, um pouco diferente, não desorganizado, mas pelo que vi, trabalhar sobre documentações torna tudo mais fácil e simples de implementar.

Sim, trabalhar com um padrão conhecido, e definido por uma comunidade, ajuda a ter o código organizado e mais acessível a outros programadores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe alguma forma de exibir possíveis falhas além do php.ini?

Já revisei mais 3 vezes e não consigo encontrar o erro D=

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se liga só Gabriel

 

 

public\index
<?php
require_once '../vendor/autoload.php';

$init = new app\Init;
 
app\init
<?php
namespace app;

class Init
{
public function __construct()
{
echo 'Hello word!';
}
}

 

Ele não identifica a clase

 

 

Fatal error: Class 'app\Init' not found in D:\Server\public_html\mvc\public\index.php on line 4

Compartilhar este post


Link para o post
Compartilhar em outros sites


vendor\composer\autoload_namespaces

<?php

$vendorDir = dirname(dirname(__FILE__));

$baseDir = dirname($vendorDir);

 

return array(

'SON' => array($vendorDir),

'App' => array($baseDir . '/'),

);

 

\composer.json

{

"name": "son/mvc",

"require": {

"php": ">=5.3"

},

"minimum-stability": "alpha",

"authors": [

{

"name": "Samuel",

"email": ""

}

],

"autoload": {

"psr-4": {

"SON\\": "vendor/SON/",

"app\\": "/"

}

},

"config": {

"bin-dir": "bin"

}

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

precisa colocar o início do namespace também:

"autoload": {
    "psr-4": {
        "SON\\": "vendor/SON/",
        "app\\": "app/"
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora sem o composer Gabriel, só pra eu entender melhor como trabalhar com classes e métodos abstratos dentro de um padrão MVC.

 

A estrutura

 

api

controllers

Foo.class.php

Init.php

 

public

index.php

public\index
 
require_once '../api/Init.php';
$init = new Init;
api\Init
 
<?php
namespace api;
 
use api\controllers\Foo;
 
class Init extends Foo
{
    /**
     * Autoload the class when an object of created from it
     * @param $Class
     */
    public function __autoload($Class)
    {
        $dir = 'store';
 
        if(file_exists($dir . '/' . $Class . '.class.php')):
            include_once $dir . '/' . $Class . '.class.php';
        endif;
    }
 
    /**
     * Set the routes used in this system
     */
    public function initRoutes()
    {
        $route['home'] = ['route' => '/', 'controller' => 'home', 'action' => 'home'];
        $this->setRoutes($route);
    }
 
    /**
     * Connect wich database
     * @return \PDO
     */
    public static function getDb()
    {
        $db = new \PDO("mysql:host=localhost;dbname=appconection","root","");
        return $db;
    }
}

 

Fatal error: Class 'api\controllers\Foo' not found

 

To achando que esse __autoload tá zuado

Compartilhar este post


Link para o post
Compartilhar em outros sites

É pessoal ainda to com esse dilema do arquivo não poder ser incluído porque não foi encontrado. Vou ter que descobrir porque fica impossível trabalhar incluindo tudo na mão sempre que precisar de um novo objeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Jafreal
      Bom dia a todos
       
      Criei um programa em MVC, que utiliza duas tabelas customizadas. Tipo Pai e Filho. Similar as tabelas SC5 e SC6. Estou usando FWMBrowse, por isso utilizei a relação abaixo no Static Function ModelDef.
       
      Local oModel         := Nil
      Local oStPai         := FWFormStruct(1, 'SZD')
      Local oStFilho         := FWFormStruct(1, 'SZE')
      Local aSZERel        := {}
       
      oModel := MPFormModel():New('zMVCMd3M')
      oModel:AddFields('SZDMASTER',,oStPai)
      oModel:AddGrid('SZEDETAIL','SZDMASTER',oStFilho,,,,,)  
       
      aAdd(aSZERel, {'ZE_FILIAL' ,'ZD_FILIAL' } )
      aAdd(aSZERel, {'ZE_EDITAL' ,'ZD_EDITAL' } ) 
       
      oModel:SetRelation('SZEDETAIL', aSZERel, SZE->(IndexKey(1))) 
      oModel:GetModel('SZEDETAIL'):SetUniqueLine({"ZE_FILIAL","ZE_EDITAL","ZE_CODPROD"})     
      oModel:SetPrimaryKey({})
       
      Return oModel
       
      O problema é que na hora da gravação na tabela filho ele não grava o campo filial(ZE_FILIAL), mas grava o campo edital(ZE_EDITAL). Alguem já passou por isso?
       
    • Por Sapinn
      Pessoal estou com um dúvida terrivel não consigo checar os paramentros passados pela url ele sempre pagar anterior o que fazer? 
      Vejam o codigo:: 
        <?php     class Rota     {         private $controlador = 'Paginas';         private $metodo = 'index';         private $parametros = [];         public function __construct()         {             $url = $this->url() ? $this->url() : [0];             if (file_exists('../app/Controllers/' . ucwords($url[0] . 'php'))) {                 $this->controlador = ucwords($url[0]);                 unset($url[0]);             }             require_once '../app/Controllers/' . $this->controlador . '.php';             $this->controlador = new $this->controlador;             if (isset($url[1])) {                 if (method_exists($this->controlador, $url[1])) {                     $this->metodo = $url[1];                     unset($url[1]);                 }             }             $this->parametros = $url ? array_values($url) : [];             call_user_func_array([$this->controlador, $this->metodo], $this->parametros);             var_dump($this);         }         private function url()         {             $url = filter_input(INPUT_GET, 'url', FILTER_SANITIZE_URL);             if (isset($url)) {                 $url = trim(rtrim($url, '/'));                 $url = explode('/', $url);                 return $url;             }         }     } Minha class Paginas:
      <?php class Paginas{              public function sobre($id){             echo $id."<hr>";         }     } O debug está me retornando:
       
      paginas
      _________________________________________________________________________________________________________________________________________________________________________________________
      object(Rota)#1 (3) { ["controlador":"Rota":private]=> object(Paginas)#2 (0) { } ["metodo":"Rota":private]=> string(5) "sobre" ["parametros":"Rota":private]=> array(1) { [0]=> string(7) "paginas" } }

      url usada: http://localhost/minha_pagina/paginas/sobre

      Ele não deveria gerar um erro e pedir para que eu passasse mais um paramentro na url? Ao invés disso ele só me retorna o método paginas o que fazer?
    • Por acneto.frc
      Olá a todos! Estou modificando algumas funções que utilizam callback para utilizar asyn-await. Uso o padrão MVC. Meu problema é que chamo a função assíncrona na model ela é executada, não retorna erro mas não volta para o controller. Abaixo parte do código.
       
      arquivo routes.js
      const segurosRoutes = require('../controllers/segurosControllers.js');
      module.exports = (app) => {
      app.get('/estagio/movimentacoes/cadastroSeguros', segurosRoutes.segurosGetAll);
      }
      arquivo controllers.js
      const segurosController = require('../models/segurosModels.js');
      module.exports = { segurosGetAll, }
      function segurosGetAll(req, res){
      console.log("Entrando em Controllers Seguros: ")
      segurosController.getAll(function (err, result){
      if(err) {
      console.log("Erro: " + err) throw err;
      }else{ console.log("Resultado "+result)
      }
      })
      }
      arquivo models.js
      const client = require('../../config/conexao.js');
      const moment = require('moment');
      module.exports = {
      getAll,
      }
      async function getAll() {
      m_sql = 'select A.*, B.seg_razaosocial, B.seg_nomefantasia, C.alu_nome, D.usu_username from seguros A left join seguradora B on A.seg_codigo = B.seg_codigo left join usuarios D on A.usu_codigo = D.usu_codigo left join alunos C on A.alu_codigo = C.alu_codigo ';
      console.log("SQL em Seguros...."+m_sql)
      console.log("-----------------------")
      let retorno
      try{
      const retorno = await client.query(m_sql)
      console.log("Retornando da SQL: "+retorno)
      } catch(erro) {
      console.log(erro)
      retorno = erro
      }
      return retorno
      }
       
    • Por acneto.frc
      Tenho uma aplicação WEB NodeJs+Javascript. Na minha view (FILTROS PARA RELATÓRIO) além dos inputs tenho um radio button onde seleciono o tipo de do relatório que será gerado. No meu Controller tenho acesso aos campos inputs (type=text) normalmente mas não tenho acesso aos inputs (type=radio). Abaixo vou colocar parte do código.
       
      <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- As 3 meta tags acima *devem* vir em primeiro lugar dentro do `head`; qualquer outro conteúdo deve vir *após* essas tags --> <title><%= title %></title> <link rel="stylesheet" type="text/css" media="screen" href="/estilos/estilos.css" /> </head> <body> <header> <nav class="menuBase"> <ul> <li><a href="/">Início</a></li> <li><a href="/estagio/relatorios">Voltar</a></li> <li><a href=""> </a></li> </ul> </nav> </header> <main class=frmRelFiltros> <ul class="nav nav-tabs"> <li class="active" id="home-tab"><a data-toggle="tab" href="#pagina1">Relatório de Contratos</a></li> </ul> <div class="tab-content"> <div id="pagina1" class="tab-pane fade in active"> <form action='/contratos/relatorios/RelContratosPrint' method="post" id="relAlunos"> <!-- primeira linha --> <br> <div class="filtros" style="margin:15px"> <div class="row"> <div class="form-group col-md-6 col-md-offset-0"> <label>Código Contrato.:</label> <input type="text" name="cod_ini" value="0"/> A <input type="text" name="cod_fim" value="999999" /> <br> <br> <label>Ativo/Inativo...:</label> <input type="text" name="atv_ini" value="A"/> A <input type="text" name="atv_fim" value="Z" /> <br> <br> <label>Data Cadastro...:</label> <input type="text" name="cad_ini" value="01/01/2000"/> A <input type="text" name="cad_fim" value="31/12/2090" /> <br> <br> <label>Data Vigência...:</label> <input type="text" name="vig_ini" value="01/01/2000"/> A <input type="text" name="vig_fim" value="31/12/2090" /> <br> <br> <label>Sit. Contrato...:</label> <input type="text" name="sit_ini" value="0"/> A <input type="text" name="sit_fim" value="99" /> <br> <br> <label>Código do Curso.:</label> <input type="text" name="cur_ini" value="1"/> A <input type="text" name="cur_fim" value="99" /> <br> <br> </div> <div class="form-group col-md-6 col-md-offset-0"> <label>Código da Empresa.:</label> <input type="text" name="emp_ini" value="1"/> A <input type="text" name="emp_fim" value="9999" /> <br> <br> <label>Centro Integração.:</label> <input type="text" name="cie_ini" value="1"/> A <input type="text" name="cie_fim" value="999"/> <br> <br> <label>Valor da Bolsa....:</label> <input type="text" name="vlr_ini" value="1"/> A <input type="text" name="vlr_fim" value="99999999"/> <br> <br> <br> <div id="opcoesRelContratos" > <p>Selecione o Tipo do Relatório:</p> <input type="radio" id="tipoRel" name="padrao" value="padrao" checked=true> <label for="padrao">Padrao-Conferência</label><br> <input type="radio" id="tipoRel" name="faixa" value="faixa"> <label for="faixa">Faixa Salarial-Estatístico</label><br> <input type="radio" id="tipoRel" name="alunos_empresas" value="alunos_empresas"> <label for="alunos_empresas">Identificação de Alunos por Empresa</label> <br> <input type="radio" id="tipoRel" name="entregas" value="entregas"> <label for="entregas">Pastas de Estágios Entregues</label><br> <input type="radio" id="tipoRel" name="contratos_vencer" value="contratos_vencer"> <label for="contratos_vencer">Contratos a Vencer 30 dias</label> <br> </div> </div> </div> </div> <br> <!-- botões de acão --> <div class="btn-acao" style="margin-bottom: 0px;"> <div class="row"> <div class="col-md-2 col-md-offset-1"> <button id="btn-executarRel" type="submit" class="btn btn-primary btn-block" >Executar </button> </div> <div class="col-md-2 col-md-offset-1"> <button type="button" id="btn-cancelarRel" class="btn btn-primary btn-block">Voltar</button> </div> </div> </div> <br> </form> </div> <!-- tab pagina 1 --> </div> </main> <!-- JavaScript (Opcional) --> <!-- jQuery primeiro, depois Popper.js, depois Bootstrap JS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script> <script type="text/javascript" src="/js/funcoesCliente.js"></script> <script type="text/javascript" src="/js/script.js"></script> </body> </html>  
       
      Agora o código do routes e controllers. No controllers preciso acessar um elemento radio da view
      *** botão para submeter a view <button id="btn-executarRel" type="submit" class="btn btn-primary btn-block" >Executar </button> *** rota a ser executada ao sonfirmar a execução do relatório <form action='/contratos/relatorios/RelContratosPrint' method="post" id="relAlunos"> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ arquivo: contratosRoutes.js var contratosControllers = require('../controllers/contratosControllers.js'); module.exports = (app) => { app.get('/contratos/relatorios/relContratos', contratosControllers.contratosRel); app.post('/contratos/relatorios/RelContratosPrint', contratosControllers.printContratosRel); } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ arquivo: contratosControllers.js const alunosController = require('../models/contratosModels.js'); const cnf_ambiente = require('../../config/config.js'); const moment = require('moment'); module.exports = { printContratosRel, } function printContratosRel(req, res){ console.log("Data Inicial Normal: "+req.body.cad_ini) console.log("Data Final Normal..: "+req.body.cad_fim) console.log("++++++++++++++++++++ DATA NO FORMATO DE ENTRADA APÓS O POST ++########################") // ++++++++++++ BAIXO O ERRO document is not defined var radios = document.getElementsById("tipoRel"); for (var i = 0; i < radios.length; i++) { if (radios[i].checked) { console.log("Escolhido: " + radios[i].value); } } cod_i = req.body.cod_ini; cod_f = req.body.cod_fim; atv_i = req.body.atv_ini; atv_f = req.body.atv_fim; cad_i = req.body.cad_ini; cad_f = req.body.cad_fim; vig_i = req.body.vig_ini; vig_f = req.body.vig_fim; sit_i = req.body.sit_ini; sit_f = req.body.sit_fim; cur_i = req.body.cur_ini; cur_f = req.body.cur_fim; emp_i = req.body.emp_ini; emp_f = req.body.emp_fim; cie_i = req.body.cie_ini; cie_f = req.body.cie_fim; vlr_i = req.body.vlr_ini; vlr_f = req.body.vlr_fim; console.log("Relatório >>>>>>>>>>>>>>>>>>>>>>>> "+cad_i + ' - '+ cad_f); alunosController.buscarPrintContratosRel( cod_i, cod_f, vlr_i, vlr_f, sit_i, sit_f, cur_i, cur_f, emp_i, emp_f, cad_i, cad_f, vig_i, vig_f, atv_i, atv_f, cie_i, cie_f, function(err, result){ if(result){ console.log("Encontrei registro de contratos.... Vou tratar das datas.."); for(var i = 0; i < result.length; i++ ){ result[i].cea_dtcadastro = moment(result[i].cea_dtcadastro).format("DD/MM/YYYY"); result[i].cea_dtalteracao = moment(result[i].cea_dtalteracao).format("DD/MM/YYYY"); result[i].cea_vigenciainicial = moment(result[i].cea_vigenciainicial).format("DD/MM/YYYY"); result[i].cea_vigenciafinal = moment(result[i].cea_vigenciafinal).format("DD/MM/YYYY"); } } if (err) { throw err; } else{ res.render('estagios/relatorios/frm_relContratosPrint.ejs', {title: 'Contratos', nomeUsuario: global.nomeUsuario, codigoUsuario: global.codigoUsuario, nomeFormulario: req.originalUrl, obj_contratos: result, }); } }); }  
    • Por Caio Henrique Bottigelli
      Olá, estou desenvolvendo um sistema em asp.net Framework MVC, usando o banco de dados Postgresql. Quando 2 usuários diferentes usam o sistema acontece conflito de informações, por exemplo, no cadastro de clientes, preciso vincular uma pessoa a um determinado cliente, caso 2 usuários estiverem usando, e os 2 fizerem essa ação de vincular pessoas a um cliente, no 2º usuário vai aparecer a pessoa que o 1º usuário vinculou. É como se o sistema estivesse usando uma única Lista e os 2 usuários estivessem compartilhando essa lista.
      As variáveis de conexão não estão estáticas, toda vez que alguém entrar no sistema, vai ser criado uma nova instancia de conexão.
      Alguém sabe como resolver esse conflito de informação entre usuários?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.