Como criar um CMS completo com CakePHP - Parte 1 - Instalando, configurando e deixando seguro Artigo

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


Este artigo foi publicado a 5 anos, 1 semana, 6 dias atrás.

Boas pessoal, Desta vez estou vindo com uma coisa simples, porém muito bacana e que precisa de muita um conjunto de técnicas diferentes para se transformar em algo realmente prático (para o cliente), seguro, eficiente e porque não poderoso, criar um CMS completo com CakePHP, quero mostrar também alguns recursos básicos que, acredito, deveriam fazer parte de todos os projetos para web, mas vou fazer por partes, postando desde a Instalação do CakePHP e preparação dele para o trabalho, até a publicação do projeto na Web, com técnicas avançadas como instalador de banco de dados com base em schemas, login com bcrypt e um helper para criar o menu multinível com TreeBehavior. Está será uma série de 9 artigos (por enquanto). Tenha em mente que ao final do projeto teremos:

  • Painel de administração com layout diferente do site
  • Tradução do core do  CakePHP
  • Configuração do inflector em Português
  • Helpers e elements para o desenvolvimento com Twitter Bootstrap
  • Sistema de administração de páginas e menu do site
  • Disponibilização de actions ajax através de prefix
  • Configuração de sistema de upload compatível com o CKeditor
  • Recursos para SEO (Sitemap.xml automático, robots.txt e metatags)

Antes de continuar, tenha em mente que para entender e acompanhar este artigo você tem que no mínimo ter lido e entendido o seguinte tutorial da documentação do CakePHP e sua continuação (para entender o que é Model, Crontroller, View e Action no CakePHP): http://book.cakephp.org/2.0/pt/tutorials-and-examples/blog/blog.html Quero que o sistema inteiro funcione da melhor forma possível,  dentro das boas práticas de desenvolvimento Frontend e backend e para isso é essencial a colaboração de vocês aqui nos comentários.

A ideia é servir um conteúdo de qualidade para quem não conhece CakePHP mas já programa em PHP, e também para quem já programa em CakePHP e precisa de algumas dicas.

Gostou deste artigo?

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

Vou deixar aqui um link que acho interessante: http://book.cakephp.org/2.0/pt/getting-started.html Para começar, baixe o CakePHP mais recente em www.cakephp.org (no momento em que escrevia este post estamos no 2.3.5, mas hoje testei coma 2.4.9 e ainda continua valendo)  e descompacte na pasta do seu projeto.

Limpando a casa

Nesta etapa eu costumo "limpar" minha instalação do CakePHP, retirando o que eu não vou usar (e se precisar eu pego no arquivo compactado novamente), sou do tipo "melhor faltar que sobrar" quando desenvolvo alguma coisa. Se quiser seguir a dica, apague os arquivos que estão na raiz deixando apenas as pastas e os seguinte arquivos:

  • index.php
  • .htaccess

Também costumo acessar a pasta caminho-para-seu-cakephp/lib/Cake e apago completamente a pasta Test. Com isso ganhamos quase 5mb de arquivos a menos.

Configurando seu CakePHP para ser seguro

Agora, precisamos definir duas coisas muito importantes no seu CakePHP: Security.salt e Security.cipherSeed.

Isso fica em app/Config/core.php, nas linhas 199  e 204.

Ambas são hashs de segurança usados para encriptar dados do CakePHP, o Security.salt por padrão vem com uma string de 41 caracteres que são letras maiúsculas, minúsculas e números, e o Security.cipherSeed somente pode conter números, a string padrão vem com 29 caracteres, e como eu sou cara de fazer trabalho 1 vez só (calma, eu crio uma hash para cada Projeto novo) eu criei um arquivinho em php super simples que faz isso pra mim (hehehe), usem e abusem, você pode baixar o código aqui: https://gist.github.com/erikfig/d03e29c1ee60ffe1506a.

Pronto, após trocar seus hashs de segurança altere as permissões do seu app/tmp para leitura e escrita (777).

Instalação avançada do CakePHP, ainda mais segura.

Esta parte é opcional.

Mas ai temos outra crise, esse tipo de permissão não é segura, além de deixarmos todos os arquivos da aplicação expostos na pasta pública do servidor. Para contornar isso você pode mover todos os arquivos do CakePHP para um diretório não acessível da sua aplicação, por exemplo, se você tem sua hospedagem em uma pasta publichtml que é aonde você coloca seu site, apenas mova o CakePHP para um diretório antes e os arquivos de app/webroot (os arquivos dentro dela, não a pasta webroot) para a pasta publichtml.

Feito isso você precisa configurar seu arquivo index.php que agora está na nova pasta webroot (anteriormente em app/webroot/index.php, para efeitos de entendimento vamos chamar de pasta pública ou webroot a partir de agora).

Neste ponto você precisa entender 3 constantes que o CakePHP usa para definir seus diretórios

  1. ROOT: diretório aonde está o CakePHP
  2. APP_DIR: diretório aonde está a pasta /app (incluindo ela)
  3. CAKECOREINCLUDE_PATH: Diretório aonde está a pasta /lib (incluindo ela), dentro dela deve ter a Cake e dentro da Cake todo o core do CakePHP

Encontre esta linha aonde definimos a raiz do CakePHP e troque de:

define('ROOT', dirname(dirname(dirname(__FILE__))));

Para:

define('ROOT', dirname(dirname(__FILE__)));

Ou seja, definimos a pasta raiz do projeto para um nível abaixo do atual (que seria public_html, www, não sei, aonde está o arquivo index.php que estamos alterando, se quiser entender mais sobre dirname e FILE veja: dirname e FILE), faça alguns testes e de um .

Agora vamos informar qual a pasta da aplicação, que é aonde vamos desenvolver todo o nosso CMS, você pode por o nome que quiser, eu vou manter o padrão "app", se você achar que consegue seguir o tutorial usando outro nome, fique a vontade, só lembre que sempre que eu disser app é esse diretório. Na linha:

define('APP_DIR', basename(dirname(dirname(__FILE__))));

Troque  por:

define('APP_DIR', 'app');

E na linha 65 descomente retirando as barras do começo (//):

define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');

Pronto, configuramos nossa aplicação removendo todos os arquivos do CakePHP da pasta de acesso web, ou seja, ninguém pode acessar pelo navegador, lembre que esta não é a única forma de configurar os diretórios, você pode agora especificar o caminho que quiser nas 3 constantes. Fica a dica: Com este tipo de configuração, você pode facilmente usar apenas uma instalação do CakePHP e várias pastas app (que você pode alterar o nome da pasta de app para o que você quiser e no define APP_DIR, escrever esse nome) e com isso ter vários projetos em um único lugar, mais fácil de atualizar, mas lembre de criar uma webroot pra cada app, ok.

Configurando o banco de dados no CakePHP

Agora vamos ao ultimo passo da configuração do nosso CakePHP, encontre o arquivo app/Config/database.php.default e retire o .default do final para que fique assim:

database.php

No arquivo já existem dois exemplos de como configurar a conexão, bastando apenas alterar para os seus dados de acesso, para isso crie um banco de dados (mysql, postgreesql, sqlite ou sqlserver), configure os dados de acesso no exemplo que tem o nome $default, com isso o CakePHP já pega esta configuração automaticamente, faça assim:

public $default= array(
    'datasource' => 'Database/Mysql',
    'persistent' =>; false,
    'host' => 'SERVIDOR',
    'login' => 'USUÁRIO DE ACESSO',
    'password' => 'A SENHA',
    'database' => 'O NOME DO BANCO DE DADOS',
    'prefix' => '',
    //'encoding' => 'utf8',
);

Obs.: Se você quiser usar outra conexão em algum model, ou mesmo em todos os models é só acrescentar uma nova configuração com outro nome e no Model:

public $useDbConfig = 'nomeDaConfiguracaoEmDatabase.php';

Lembrando que o padrão do $useDbConfig é default (o public $default que configuramos, mas não precisa informar, isso o CakePHP faz sozinho).

Host, login, password e database não vou comentar, já está bem claro acima.

Datasource - O datasource define qual o tipo do seu banco de dados, você pode usar qualquer um dos 4 disponíveis ( para usar os 4 tipos de banco de dados pré-configurados no CakePHP, altere para: Database/Mysql ou Database/Sqlserver ou Database/Postgres ou Database/Sqlite) ou um dos que estão aqui https://github.com/cakephp/datasources/tree/2.0 ou um que você mesmo criar), já que criaremos todo o nosso banco de dados usando o schema,  tanto faz o que você vai usar como banco, deixe que o CakePHP se preocupe com o resto, eu vou usar Mysql.

Persistent - Persistent define se uma conexão ao banco de dados deve ser permanente ou não, se quer saber mais sobre o assunto leia :http://php.net/manual/pt_BR/features.persistent-connections.php.

Prefix - Com prefix definimos o que deve ser escrito antes do nome das nossas tabelas no banco de dados, ideal para banco de dados aonde você tem tabelas pertencentes a outros scripts e não quer fazer muita bagunça (exemplo: no caso de um Model chamado Post a tabela seria posts, porém se você tiver um blog Wordpress adicionaria um prefixo wp_, assim: wpposts, aonde wp é o prefix do Wordpress).

Este parâmetro é opcional e pode ser removido da configuração sem problema nenhum, faça uns testes.

Encoding - Se tem uma configuração que eu nunca usei foi o encoding, o padrão urt8 nunca me deu problemas, se você precisar alterar, fique a vontade para checar no seu banco de dados e usar aqui a codificação de caracteres que precisar.

Este parâmetro é opcional e pode ser removido da configuração sem problema nenhum (inclusive já vem comentado).

Outros - Além desses 4 ainda temos port (porta da conexão com o banco de dados), schema (Usado em PostgreSQL) e unix_socket (também usado pelo PostgreSQL para conectar via sockets em unix).

Outra coisa legal é que também podemos usar o datasource para se conectar a serviços que não são serviços de banco de dados, como Redes Sociais, protocolos LDAP e RSS do Wordpress (eu fiz isso no WebDevBr, em baixo da página de cursos), por exemplo, mas isso fica pra outro artigo.

Tudo pronto - Com isso acredito que finalizamos esta primeira parte de como configurar, instalar e deixar seguro nosso CakePHP, note que tentei ser o mais abrangente possível, desde a instalação avançada do CakePHP, configurar os hashs Security.salt e Security.cipherSeed, limpar o CakePHP para ficar mais "clean" na hora do upload e armazenamento, até configurar o acesso ao banco de dados.

No próximo tutorial, vou mostrar como criar o banco de dados sem usar nenhuma linha de sql, apenas com o console do CakePHP, para que você crie seu CMS usando qualquer banco de dados que quiser.

Baixe aqui um arquivo exemplo do que fizemos neste tutorial..

Então este foi 1º artigo de 9 que ensina como construir um CMS completo com CakePHP.


Cursos relacionados


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