Nao deixe jamais que asTristezas de ontemE a incerteza Do amanha,Impeca a felicidade de hojeAs vezes e necessarioNao pensar em nada E permitir que o sonhoInvada o corpoE de vida ao coracao. Nesse breve tutorial vou registrar algumas descobertas para rodar um projetinho no zend expressive (micro framework do zend), com suporte ao postgres.RequisitosPHP 7.0.3 (cli);Extensao: pdo-pgsql;Composer 1.0-dev;Postgres 9.4;Clonando o esqueletoExecute o comando abaixo, em um diretorio a escolha:$ composer create-project zendframework/zend-expressive-skeleton exampleAo fazer isso voce sera questionado sobre quais modulos serao carregados, eu escolhi:Full skeleton (opcao default);FastRoute (opcao default);Zend ServiceManager (opcao default);Zend View (opcao 3);Whoops;Depois atualize o composer:$ composer updateInstalando algumas dependencias opcionais com composerEu gosto sempre de usar o Debug do Zend, e tambem sou fa do padrao de projeto, Table Data Gateway, descrito por Martin Fowler no livro "Patterns of Enterprise Application Architecture", sob o numero: 466.$ composer require zendframework/zend-db zendframework/zend-debugTestando a instalacaoRode o sistema usando:$ php -S localhost:80 -t public/Voce podera verificar o sucesso atraves das paginas:http://localhost/http://localhost/api/pingConfigurando o acesso ao PostgresVamos criar o arquivo de configuracao dentro de diretorio que a aplicacao ira ler automaticamente:<?phpreturn [ 'db' => [ 'driver' => 'Pdo', 'dsn' => 'pgsql:host=localhost;port=5432;', 'database' => 'postgres', 'user' => 'postgres', 'password' => 'postgres' ],];Salve dentro do diretorio: <projeto>/config/autoload/, com o nome: "database.global.php".Perceba que eu utilizei o nome de usuario, senha e nome do banco de dados como postgres. Ajuste!Altere o arquivo de configuracao: "dependencies.global.php", adicione ao array dependencies->factories, mais um valor:Zend\Db\Adapter\Adapter::class => Zend\Db\Adapter\AdapterServiceFactory::classFeito isso, ja fica registrado a conexao com o banco de dados.Adicionando o objeto de banco as requisicoesUtilize uma factory para fazer a inicializacao da classe que vai responder a requisicao, do "middleware", adicione o trecho a seguir para injetar a dependencia: $db = $container->get('Zend\Db\Adapter\Adapter'); return new HomePageAction($router, $template, $db);Utilize um nome qualquer, como por exemplo, DatabaseHelperMiddlewareFactory para a classe "factory";Na classe que realmente ira fazer a acao (por exemplo, HomePageAction), iremos adicionar o terceiro parametro ao metodo construtor e copia-lo como membro da classe.private $db;public function __construct(Router\RouterInterface $router, Template\TemplateRendererInterface $template = null, $db) { $this->router = $router; $this->template = $template; $this->db = $db; }Nesse ponto, ja e possivel utilizar o "this->db", e realizar consultas. Mas ainda falta utilizar o table data gateway.Criando abstracoes das tabelasO que eu mais gosto nesse padrao e a nao necessidade de transformar o conteudo da tabela em objeto de negocio. Entao vamos criar um diretorio para guardar esse tipo de classe, criaremos:<projeto>/src/App/Model/Vamos criar uma classe como o exemplo abaixo:<?phpnamespace App\Model;use Zend\Db\TableGateway\TableGateway;use Zend\Db\Sql\TableIdentifier as TableIdentifier;class Usuario extends TableGateway{ public function __construct($table, $adapter, $features = null, $resultSetPrototype = null, $sql = null){ return parent::__construct( new TableIdentifier('tb_usuario', 'pessoal'), $adapter, $features, $resultSetPrototype, $sql ); }}A classe Usuario, estende a classe TableGateway que tem os metodos de acesso aos dados, eu so sobrescrevi o metodo construtor para marcar o nome da tabela e o esquema que a tabela utiliza. Para usar a combinacao nome da tabela e nome do esquema, eu tive que instanciar um "TableIdentifier".Agora, vamos voltar, na nossa action, e utilizar nossa abstracao da tabela de banco de dados:use App\Model\Usuario as Model;e no metodo onde se faz a acao:$model = new Model(null,