Controllers
Controllers podem ser criados rapidamente através dos Comandos de console.
Os controllers da aplicação devem ser criados dentro do diretório Controllers
dos seus respectivos módulos e extender a classe
Gangoy\Core\Http\Controller\AbstractController
ou Gangoy\Core\Http\Controller\AbstractApiController
que são mais indicadas para criação de API Restful.
<?php
namespace App\Controllers;
use Gangoy\Core\Http\Controller\AbstractController;
class DefaultController extends AbstractController
{
public function index()
{
//
}
}
Então configure suas rotas para trabalhar com seus controllers.
$app->get('/', ['\App\Controllers\DefaultController', 'index'])->name('home');
Note que seu controller deve ser passado como segundo argumento do método da rota em formato de array usando o namespace completo do controller e a ação correspondente que ele deve tomar para a referida rota.
Injeção de dependências
O Container de Dependências resolve automaticamente qualquer dependência que você precise utilizar nos métodos do controller desde que essa dependência tenha sido registrada no arquivo config/dependencies.php
de qualquer módulo ativo e que seja passado sua assinatura. Veja o exemplo de como obter a instância da classe Response:
<?php
namespace App\Controllers;
use Gangoy\Core\Http\Controller\AbstractController;
use Psr\Http\Message\ResponseInterface as Response;
class DefaultController extends AbstractController
{
public function index(Response $response)
{
return $response->getBody()->write('<h1>Hello World!</h1>');
}
}
Métodos e atributos de herança das classes extendidas.
Seus controllers recebem como herança alguns métodos e atributos da classe extendida AbstractController
ou AbstractApiContoller
para facilitar acesso aos recursos/serviços
disponíveis no Container de Dependências.
__construct
Por padrão a aplicação injeta automaticamente o Container de Dependências no contrutor de todo controller. Caso você precise implementar alguma lógica no construtor deve-se lembrar de adicionar o mesmo como atributo e passar para a classe pai. Exemplo:
<?php
namespace App\Controllers;
use Gangoy\Core\Http\Controller\AbstractController;
use Psr\Container\ContainerInterface;
class DefaultController extends AbstractController
{
public function __construct(ContainerInterface $container)
{
parent::__construct($container);
//
}
}
Atributos
-
$this->container - Instância do Container de Dependências.
-
$this->logger - Instância do Monolog\Logger para gravar logs das atividades do sistema.
-
$this->validator - Instância do serviço de validação de dados.
-
$this->db - Instância do Illuminate Database responsável pela manipulação do banco de dados.
-
$this->events - Instância do Zend EventManager, responsável pela manipulação de eventos.
-
$this->twig - Instância do Twig, responsável por renderizar as Views.
-
$this->flash - Instância do servico de Flash Message.
Nota: em AbstractApiController
não existe os atributos $this->twig
e $this->flash
por se tratar de um controller específico para Apis Restful.
Métodos
-
$this->redirect(Response $response, string $url, int $status = 307) - Este método abstrai a forma um pouco verbosa de redirecionamento da Response PSR 7.
- 1º argumento é o objeto de resposta PSR 7.
- 2ª argumento é a url de redirecionamento.
- 3º argumento opcional. Http status code da resposta.
-
$this->pathFor(string $name, array $data = [], array $queryParams = []) - Método que retorna a url da rota de acordo com o seu nome. Veja como dar nome às rotas.
- 1º argumento é o nome da rota. Ex: 'auth.getLogin'.
- 2º argumento opcional. Array com as chaves e valores dos parâmetros da rota caso exista.
- 3º argumento opcional. Array com chaves e valores caso queira passar uma query params.
-
$this->json(ResponseInterface $response, array $data, $status = 200) - Este método abstrai a forma padrão de resposta em formato JSON da Response PSR 7
- 1º argumento é o objeto de resposta PSR 7.
- 2º argumento é o array com os dados a serem enviados e convertidos para JSON.
- 3º argumento opcional. Http status code da resposta.
-
$this->moveUpLoadedFile(UploadedFileInterface $uploadedFile, $subDirectory = null) - Método auxiliar que remove caracteres especiais do nome de um arquivo de upload e o normaliza para não causar confilto com outros já existentes e salva no diretório padrão
storage/public
. Veja mais informações no tutorial de upload de arquivos.- 1º argumento é o objeto UploadedFileInterface PSR 7.
- 2º argumento opcional. Nome de um subdiretório para o armazenamento do arquivo.