Como criar um CMS completo com CakePHP – Parte 3 – Instalador de banco de dados para CakePHP com Schema Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 4 anos, 4 meses, 2 semanas, 5 dias atrás.

3º artigo da série! Desta vez vamos ver como criar um instalador no estilo Wordpress para nosso CMS.

Qual a ideia?

A ideia aqui é que ao acessar a URL seusite.com.br/instala/instala o plugin exiba uma tela de checagem do CakePHP, estando tudo ok, partimos para o segundo passo, criar o banco de dados, e no último passo ele crie o usuário administrador, e então deixe de funcionar.

Então apagar o plugin é apenas uma medida adicional, porém recomendada.

Gostou deste artigo?

Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!

Instalando o plugin de criação de banco de dados

Se você não se lembra, shells são scripts php que o console do CakePHP usa para executar tarefas através de linhas de comando, como criar tabelas no banco de dados, criar Models, Controllers e Views, Cronjobs e muito mais, o que vamos fazer aqui é baixar e executar um script que é uma extensão da SchemaShell, que apenas cria as tabelas e os dados no banco de dados, sem perguntar nada nem precisar fazer nenhuma configuração, ideal para executar através de um Controller.

Esse shell está dentro de um plugin que controla os 3 passos da instalação:

  1. Verificação do CakePHP
  2. Criação do banco de dados
  3. Criação de um usuário administrador

Para baixar o plugin, clique aqui.

Copie para a pasta Plugin renomeando a pasta para Instala, de forma que fique assim: app/Plugin/Instala e 4 pastas dentro de Instala.

Dentro do app/Config/bootstrap.php insira CakePlugin::load('Instala'); ou CakePlugin::loadAll();

Também precisamos configurar o Model de criação de usuários, baixe ele aqui e copie em app/Model/.

cake instala.schemaInstall instala

Se você fez isso e seguiu o passo anterior sobre como configurar o schema.php (se não, volte imediatamente para lá, agora!), você acabou de criar o banco de dados, então, não seja apressadinho e vamos remover isso.

Você pode usar o console, o phpmyadmin ou o que quiser, o importante é o banco de dados estar zerado, sem nenhuma tabela nele.

Como funciona a execução da Shell dentro de um Controller

Uma coisa que quero ressaltar é o arquivo app/Plugin/Instala/Controller/InstalaController.php. A action banco de dados é a responsável por executar a nossa shell, e essa é uma tarefa muito simples de se fazer (rodar uma shell dentro de um controller ou model), basta você importar, instanciar e executar, como faria com qualquer outra coisa, afinal as shells são códigos PHP comuns.

//Importo a minha Shell
App::uses('SchemaInstallShell', 'Console/Command');

//instancio a shell
$shell= new SchemaInstallShell();

//inicio a shell
$shell->startup();

//executo a função instalar (da minha schellInstall, que não faz perguntas, apenas instala)
$shell->instala();

É algo muito simples agora que você aprendeu, mas eu tive que pensar muito e analizar os arquivos e a documentação do CakePHP, já que não achei material disponível na internet sobre como executar uma shell dentro de um controller ou model, mas sabia que isso era possível.

A segurança do instalador

Também aproveito para chamar outra função do SchemaInstall no InstalaController, que é o checkInstalacao(), uma função que retorna as tabelas do arquivo schema, assim eu comparo com array_dif, com as existentes no banco de dados e se todas existirem não há necessidade de prosseguir com a execução do schema, e passamos para o próximo passo.

No ultimo passo configuramos o usuário administrador, e aqui eu executo um find('count'), no meu model de usuários, se existir algo cadastrado eu retorno um erro 403 (de proibição), se não ele apresenta o formulário para cadastrar o usuário.

Com isso, após a instalação do banco de dados, fica a cargo do usuário remover ou não o plugin de instalação, o recomendado, claro, é remove-lo, porém como exige que seja removida a linha CakePlugin::load('Instala'); do arquivo bootstrap.php, pode ser quem nem todos consigam fazer isso (estou falando de usuário leigos)

Considerações

Agora você já tem o seu CakePHP preparado e seguro, o banco de dados corretamente configurado via schema.php e um instalador web para o banco de dados que não se preocupa se estamos usando mysql, postgreesql ou qualquer outra coisa vamos começar criar a estrutura de arquivos e prefix que iremos usar para o nosso CMS, e também já construir e deixar funcional a interface do painel usando Twitter bootstrap, mas isso no próximo artigo.

Somente lembrando que para acessar o instalador: seucakephp/instala/instala.

Qualquer dúvida ou problema que encontrar, não hesite em perguntar nos comentários, estou quase sempre online para responder.


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!