Atualizando da versão 3.x para 4.x – DICAS.CodeIgniter.com.br
por Fábio S. Reszko · Published 4 de abril de 2019 · Updated 4 de abril de 2019
Neste post vou abordar algumas questões referentes à atualização do CodeIgniter 3.x para a versão 4.x.
Pra começar, tenho uma notícia boa e uma ruim.
A boa é que: O CodeIgniter 4 foi totalmente reescrito.
E a ruim é: O CodeIgniter 4 e não é mais compatível com a versão 3.x.
Por isso, agora é mais apropriado você pensar em converter sua aplicação do que atualizá-la.
Uma vez que você tenha feito isto, atualizar de uma versão do CodeIgniter 4 para uma nova versão será mais simples e direta.
A filosofia "lean, mean and simple" em tradução direta: "leve, magro e simples", foi mantida, mas as implementações têm muitas diferenças, se comparadas com o CodeIgniter 3.
Nem todas as bibliotecas do CI3 foram portadas ou reescritas para a o CI4!
Veja os tópicos no subfórum CodeIgniter 4 Roadmap para uma lista atualizada.
Não tenha preguiça e leia o guia do usuário antes de você embarcar em uma conversão do seu projeto.
CI4 ainda está disponível com o modo de instalação ready-to-run em zip ou tarball, a qual inclui o guia do usuário (que agora está dentro da subpasta docs).
Ele também pode ser instalado usando Composer.
CI4 foi construído para o php7.2+ e tudo no framework usa namespaces, exceto os helpers.
O framework ainda possui as pastas app e system, com a mesma interpretação de antes.
O framework agora fornece uma pasta public, que tem a intenção de ser o document root da sua aplicação.
Há também uma pasta writable para gerenciar dados de cache, logs e dados de sessão.
A pasta application parece muito similar à do CI3, com algumas mudanças de nomes, e algumas subpastas foram movidas para a pasta writable.
Não há mais uma pasta application/core, já que agora existem mecanismos diferentes para estender os componentes do framework (Veja abaixo).
Não existe mais um "superobjeto", get_instance() do CodeIgniter que magicamente injetava as propriedades no seu controller.
As classes serão instanciadas somente se forem necessárias, e os componentes são gerenciados por Services.
O carregamento das classes é feito segundo o estilo PSR-4, dentro do App (application) e o namespace de nível mais alto do CodeIgniter; com suporte ao autoloading do composer, e até mesmo usando um estilo menos agressivo de tentativa de localização dos models e libraries se eles estiverem na pasta correta mesmo se não estiverem usando namespaces.
Você pode configurar o suporte de carregamento da classes da maneira que for mais confortável para você, incluindo o estilo "HMVC".
Controllers agora estendem \CodeIgniter\Controller em vez de CI_Controller.
Os Models do CI4 agora possuem muito mais funcionalidades, incluindo conexão automática ao banco de dados, CRUD básico, validação direto no model e paginação automática.
O CI4 também possui uma classe Entity que você poderá usar para criar um mapeamento de dados mais rico para suas tabelas.
Em vez de usar $this->load->model(x) como era no CI3, agora você deverá usar: $this->x = new X(); seguindo a convenção usando namespaces para o seu componente.
As Views se parecem bastante com as de antes, mas agora elas são chamadas de um jeito diferente. Em vez de $this->load->view(x) como era no CI3, agora você deve usar: echo view(x);
O CI4 suporta views "células", para construir a sua página em pedaços.
O template parser ainda está lá, mas substancialmente melhorado.
As suas classes ainda podem ficar em app/Libraries, mas não é obrigatório.
Em vez de usar: $this->load->library(x); como era no CI3, agora você deve usar $this->x = new X();, como recomenda a convenção de uso de namespaces para seu componente.
Helpers estão exatamente como eram antes, porém alguns foram simplificados.
Você não precisa uma pasta core para gerenciar o componente de extensão ou substituição MY_…
Você não precisa de classes do tipo MY_x dentro da sua pasta de libraries para estender ou substituir partes do CI4.
Crie suas classes do jeito que você precisar e insira os métodos de serviço apropriados em app/Config/Services.php para carregar seus componentes em vez dos componentes padrão.