Don't you speak portuguese? Translate this site with Google Translator

Pensamento do Dia

Aceita com serenidade o cortejo dos anos, e renuncia sem reservas aos dons da juventude. Desiderata

4 - Instalação e pré-requisitos do CakePHP 3

4 – Instalação e pré-requisitos do CakePHP 3

Talento ganha jogos, mas trabalho sério e inteligência ganha campeonato.

Michael Jordan

 

Pré-requisitos da versão 3.7

- Web server como Apache 2 com mod_rewrite ou Nginx ou IIS

- PHP 5.6 ou superior

- Extensões mbstring, intl, simplexml e PDO

- Um dos SGBDs suportados: MySQL, PostgreSQL, MariaDB, Microsoft SQL Server e SQLite

- Composer (opcional mas recomendado)

 

Instalação do Composer

- Se tens a versão 7 ou superior do PHP instale assim (no Debian ou derivada):

sudo apt-get install composer

 

- Para a versão 5.x assim:

sudo su

curl -sS https://getcomposer.org/installer | php

 

Colocar no path do Linux na versão 5.x:

mv composer.phar /usr/local/bin/composer

 

- A instalação no Windows é feita baixando

https://getcomposer.org/Composer-Setup.exe

 

Instalando o CakePHP

Para criar um aplicativo com o CakePHP 3, instalamos sua estrutura básica e completa através do composer para então criar o aplicativo usando o bake ou manualmente

composer create-project --prefer-dist cakephp/app nome_app

 

A vantagem de usar o Composer é que ele irá completar automaticamente um conjunto importante de tarefas, como configurar corretamente as permissões das pastas /tmp e /logs. criar o config/app.php para você e setar um salt único.

Como o comando é grande e pode dar trabalho de memorizar, vamos criar um link (no Windows crie um bat com %1), no Linux para receber parâmetro é $1.

sudo nano /usr/local/bin/cake

No windows salve na pasta c:\windows para que fique no path

Cole a linha

composer create-project --prefer-dist cakephp/app $1

 

No Windows

Crie um arquivo c:\windows\cake.bat

composer create-project --prefer-dist cakephp/app %1

 

Para instalar uma versão diferente da atual, a 3.5.13, por exemplo:

composer create-project --prefer-dist cakephp/cakephp:3.5.13 blog

 

Execute assim com nosso script/batch criado:

cd /var/www/html

cake cliente

 

Ou

cd c:\xampp\htdocs

cake.bat cliente

 

Ao finalizar o Cake já terá trazido todo o seu código para a pasta /var/www/html/cliente ou c:\xampp\htdocs\cliente.

E já vem com um controller default para que vejamos algo.

Vejas as mensagens finais do instalador:

Writing lock file

Generating autoload files

> Cake\Composer\Installer\PluginInstaller::postAutoloadDump

> App\Console\Installer::postInstall

Created `config/app.php` file

Created `/backup/www/cake/aclbr/tmp/cache/views` directory

Set Folder Permissions ? (Default to Y) [Y,n]?

Permissions set on /backup/www/cake/aclbr/tmp/cache

Permissions set on /backup/www/cake/aclbr/tmp/cache/models

Permissions set on /backup/www/cake/aclbr/tmp/cache/persistent

Permissions set on /backup/www/cake/aclbr/tmp/cache/views

Permissions set on /backup/www/cake/aclbr/tmp/sessions

Permissions set on /backup/www/cake/aclbr/tmp/tests

Permissions set on /backup/www/cake/aclbr/tmp

Permissions set on /backup/www/cake/aclbr/logs

Updated Security.salt value in config/app.php

 

Ele criou o arquivo config/app.php

Ajustou as permissões no /tmp e no /logs

Atualizou o salt em config/app.php

 

Estrutura de diretórios do CakePHP 3.7.7:

/bin – contém todos os arquivos executáveis para a console do CakePHP

/config – Contém os arquivos de configuração do usuário

/logs – Contém os arquivos de log da aplicação

/plugins – destinado a armazenar os plugins locais da aplicação

/src – Contém os Controllers, Models, Templates e Views da aplicação

/tests – Contém todos os seus arquivos de teste

/tmp – Arquivos temporários são armazenados aqui

/vendor – Contém todas as dependências do Cake e o próprio. Os instalados com

composer ficam aqui

/webroot – Contém todos os arquivos publicamente acessíveis

composer.json – Arquivo do composer com a lista e versões dos arquivos que a aplicação

depende

composer.lock – Arquivo do composer que bloqueia específicas versões de pacotes de

PHP instalados

index.php - Arquivo inicial que chama o webroot

phpunit.xml.dist – A ser usado pelo phpunit

README.md – Informações do repositório para o GitHub

Mais Detalhes em:

https://book.cakephp.org/3.0/pt/intro/cakephp-folder-structure.html

 

Os diretórios tmp e logs precisam ter permissões adequadas para que possam ser alterados pelo seu servidor web. Se você usou o Composer na instalação, ele deve ter feito isso por você e confirmado com uma mensagem "Permissions set on <folder>". Se você ao invés disso, recebeu uma mensagem de erro ou se quiser fazê-lo manualmente, a melhor forma seria descobrir por qual usuário o seu servidor web é executado (<?= 'whoami'; ?>) e alterar o proprietário desses dois diretórios para este usuário. Os comandos finais a serem executados (em *nix) podem ser algo como:

chown -R www-data tmp
chown -R www-data logs

Se por alguma razão o CakePHP não puder escrever nesses diretórios, você será informado por uma advertência enquanto não estiver em modo de produção.

Chame pelo navegador

http://localhost/cliente

 

Configurações do banco de dados no config/app.php

Procure a seção Datasources e altere apenas:

'username' => 'root',

'password' => '',

'database' => 'cliente',

 

Crie o banco chamado cliente com a tabela cliente e importe o script abaixo:

CREATE TABLE IF NOT EXISTS `clientes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` char(45) NOT NULL,
`email` varchar(50) DEFAULT NULL,
`data_nasc` date DEFAULT NULL,
`cpf` char(11) NOT NULL,
PRIMARY KEY (`id`)
);

INSERT INTO `clientes` (`id`, `nome`, `email`, `data_nasc`, `cpf`) VALUES
(1, 'Erin Pate Skinner', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-10-07', '74426302285'),
(2, 'Leonard Martinez Hays', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2012-08-22', '75278965048'),
(3, 'Aladdin Curry French', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2012-10-28', '10376915676'),
(4, 'Chloe Macdonald Dalton', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-05-12', '64444679077'),
(5, 'Mallory Sweet Strong', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-05-19', '15687101505'),
(6, 'Jermaine Pierce Woodward', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-03-22', '36712502261'),
(7, 'Bell Raymond Pruitt', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-03-09', '64629428663'),
(8, 'Lydia Bell Whitfield', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-12-02', '41962749289'),
(9, 'Tad Mason Graham', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2012-06-08', '05642745964'),
(10, 'Felix Bradshaw Mccray', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-09-16', '82071617437'),
(11, 'Idona Jensen Garrett', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2014-01-08', '07941004794'),
(12, 'Wayne Ray Padilla', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2014-04-03', '60934465323'),
(13, 'Nelle Finch Cantu', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2012-05-29', '64704574060'),
(14, 'Maite Emerson Best', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2014-04-01', '04531857574'),
(15, 'Jada Holman Wilkins', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-01-11', '88994190741'),
(16, 'Beverly Lane Lindsay', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-10-22', '40194697135'),
(17, 'Hayden Clayton Foreman', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-04-16', '72583040904'),
(18, 'Hadassah Leonard Key', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-04-07', '72626859924'),
(19, 'Adrian Ballard Peters', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2012-07-13', '50918748283'),
(20, 'Phyllis Richmond Wynn', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2013-07-01', '62712888794'),
(21, 'Amelia Baird Barrera', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2012-06-09', '12106836368'),
(22, 'Whitney Mack Lamb', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2012-06-26', '52403407001'),
(23, 'Myra Mcmahon Valentine', Este endereço de email está sendo protegido de spambots. Você precisa do JavaScript ativado para vê-lo.', '2012-07-27', '42961419194');

 

Routes

Para que ao abrir o aplicativo automaticamente ele mostra o controller Clientes, em config/routes.php altere a linha abaixo:

Originalmente é assim a alinha:

$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);

 

Mudei para

$routes->connect('/', ['controller' => 'Clientes', 'action' => 'index']);

 

Geração do Código do CRUD completo com o Bake

Depois de configurados o app.php e o routes.php, então execute:

cd cliente

bin/cake bake all clientes

Importante.: Lembre de mudar a barra / por \ se estiver usando o Windows.

 

Como saber a versão atual do CakePHP que está instalado?

bin/cake version

 

Acesse novamente pelo Navegador

Agora pode acessar seu aplicativo pelo navegador

http://localhost/cliente

Aparece por default o Clientes/index, como configuramos no routes

Um CRUD completo e fundional com bons recursos.

 

Customizações

Agora já podemos melhorar seus recursos e também instalar o plugin cake-acl-br para implementar ACL com Bootstrap e outros bons recursos, ou se apenas deseja

implementar o Bootstrap instale o plugin cake-bs-br:

https://github.com/ribafs/cake-acl-br

https://github.com/ribafs/cake-bs-br

 

O tutorial/README.md tem um bom tutorial que mostra diversas customizações do aplicativo.

Testando

Crie um novo registro e insira um e-mail inválido e então clique em SUBMIT. Veja que o Cake já criou o form usando HTML5, pois o campo para o e-mail é do tipo e-mail e o HTML5 não deixa inserir um e-mail inválido.

 

Tome cuidado com a criação do banco de dados

O Cake faz isso com as informações que colhe do banco de dados e critica de acordo com as constraints presentes. Um exemplo é quando usamos o NOT NULL em um campo. Neste caso o Cake cria uma validação para obrigar o preenchimento do campo.

 

Problema com o mod_rewrite?

Ocasionalmente, novos usuários irão se atrapalhar com problemas de mod_rewrite. Por exemplo, se a página de boas vindas do CakePHP parecer estranha (sem imagens ou estilos CSS). Isto provavelmente significa que o mod_rewrite não está funcionando em seu servidor. Por favor, verifique a seção Reescrita de URL para obter ajuda e resolver qualquer problema relacionado.

Detalhes

https://book.cakephp.org/3.0/en/installation.html

 

4.1 - Algumas configurações

 

config/app.php

Debug


    'debug' => filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN),

    'App' => [
        'namespace' => 'App',
        'encoding' => env('APP_ENCODING', 'UTF-8'),
        'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'),
        'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'UTC'),
        'base' => false,
        'dir' => 'src',
        'webroot' => 'webroot',
        'wwwRoot' => WWW_ROOT,
        //'baseUrl' => env('SCRIPT_NAME'),
        'fullBaseUrl' => false,
        'imageBaseUrl' => 'img/',
        'cssBaseUrl' => 'css/',
        'jsBaseUrl' => 'js/',
        'paths' => [
            'plugins' => [ROOT . DS . 'plugins' . DS],
            'templates' => [APP . 'Template' . DS],
            'locales' => [APP . 'Locale' . DS],
        ],
    ],

    'Cache' => [
        'default' => [
            'className' => 'Cake\Cache\Engine\FileEngine',
            'path' => CACHE,
            'url' => env('CACHE_DEFAULT_URL', null),
        ],

        /**
         * Configure the cache used for general framework caching.
         * Translation cache files are stored with this configuration.
         * Duration will be set to '+2 minutes' in bootstrap.php when debug = true
         * If you set 'className' => 'Null' core cache will be disabled.
         */
        '_cake_core_' => [
            'className' => 'Cake\Cache\Engine\FileEngine',
            'prefix' => 'myapp_cake_core_',
            'path' => CACHE . 'persistent/',
            'serialize' => true,
            'duration' => '+1 years',
            'url' => env('CACHE_CAKECORE_URL', null),
        ],

        /**
         * Configure the cache for model and datasource caches. This cache
         * configuration is used to store schema descriptions, and table listings
         * in connections.
         * Duration will be set to '+2 minutes' in bootstrap.php when debug = true
         */
        '_cake_model_' => [
            'className' => 'Cake\Cache\Engine\FileEngine',
            'prefix' => 'myapp_cake_model_',
            'path' => CACHE . 'models/',
            'serialize' => true,
            'duration' => '+1 years',
            'url' => env('CACHE_CAKEMODEL_URL', null),
        ],

        /**
         * Configure the cache for routes. The cached routes collection is built the
         * first time the routes are processed via `config/routes.php`.
         * Duration will be set to '+2 seconds' in bootstrap.php when debug = true
         */
        '_cake_routes_' => [
            'className' => 'Cake\Cache\Engine\FileEngine',
            'prefix' => 'myapp_cake_routes_',
            'path' => CACHE,
            'serialize' => true,
            'duration' => '+1 years',
            'url' => env('CACHE_CAKEROUTES_URL', null),
        ],
    ],

    'Error' => [
        'errorLevel' => E_ALL,
        'exceptionRenderer' => 'Cake\Error\ExceptionRenderer',
        'skipLog' => [],
        'log' => true,
        'trace' => true,
    ],

    'EmailTransport' => [
        'default' => [
            'className' => 'Cake\Mailer\Transport\MailTransport',
            /*
             * The following keys are used in SMTP transports:
             */
            'host' => 'localhost',
            'port' => 25,
            'timeout' => 30,
            'username' => null,
            'password' => null,
            'client' => null,
            'tls' => null,
            'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
        ],
    ],

    'Email' => [
        'default' => [
            'transport' => 'default',
            'from' => 'you@localhost',
            //'charset' => 'utf-8',
            //'headerCharset' => 'utf-8',
        ],
    ],

    'Datasources' => [
        'default' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            //'port' => 'non_standard_port_number',
            'username' => 'root',
            'password' => 'root',
            'database' => 'admin_area',
            //'encoding' => 'utf8mb4',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,

            'quoteIdentifiers' => false,

            'url' => env('DATABASE_URL', null),
        ],

        /**
         * The test connection is used during the test suite.
         */
        'test' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'persistent' => false,
            'host' => 'localhost',
            //'port' => 'non_standard_port_number',
            'username' => 'my_app',
            'password' => 'secret',
            'database' => 'test_myapp',
            //'encoding' => 'utf8mb4',
            'timezone' => 'UTC',
            'cacheMetadata' => true,
            'quoteIdentifiers' => false,
            'log' => false,
            //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
            'url' => env('DATABASE_TEST_URL', null),
        ],
    ],

    'Log' => [
        'debug' => [
            'className' => 'Cake\Log\Engine\FileLog',
            'path' => LOGS,
            'file' => 'debug',
            'url' => env('LOG_DEBUG_URL', null),
            'scopes' => false,
            'levels' => ['notice', 'info', 'debug'],
        ],
        'error' => [
            'className' => 'Cake\Log\Engine\FileLog',
            'path' => LOGS,
            'file' => 'error',
            'url' => env('LOG_ERROR_URL', null),
            'scopes' => false,
            'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
        ],
        // To enable this dedicated query log, you need set your datasource's log flag to true
        'queries' => [
            'className' => 'Cake\Log\Engine\FileLog',
            'path' => LOGS,
            'file' => 'queries',
            'url' => env('LOG_QUERIES_URL', null),
            'scopes' => ['queriesLog'],
        ],
    ],

    'Session' => [
        'defaults' => 'php',
    ],

 

config/bootstrap.php

* Setup detectors for mobile and tablet.

*/

ServerRequest::addDetector('mobile', function ($request) {

$detector = new \Detection\MobileDetect();

return $detector->isMobile();

});

ServerRequest::addDetector('tablet', function ($request) {

$detector = new \Detection\MobileDetect();

return $detector->isTablet();

});

 

Também podemos configurar timezone e formato de datas no bootstrap.php, veja:

date_default_timezone_set('America/Fortaleza');

/**
* Locale Formats
*/

\Cake\I18n\Time::setToStringFormat([IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT]);
\Cake\I18n\Time::setToStringFormat('dd/MM/YYYY HH:mm');

\Cake\Database\Type::build('date')->useLocaleParser()->setLocaleFormat('dd/MM/yyyy');

\Cake\Database\Type::build('datetime')->useLocaleParser()->setLocaleFormat('dd/MM/yyyy HH:mm');

\Cake\Database\Type::build('timestamp')->useLocaleParser()->setLocaleFormat('dd/MM/yyyy HH:mm');

\Cake\Database\Type::build('decimal')->useLocaleParser();

\Cake\Database\Type::build('float')->useLocaleParser();

ini_set('intl.default_locale', 'pt_BR');

/**
* Default formats
*/
\Cake\I18n\Time::setToStringFormat('dd/MM/yyyy HH:mm:ss');
\Cake\I18n\Date::setToStringFormat('dd/MM/yyyy');
\Cake\I18n\FrozenTime::setToStringFormat('dd/MM/yyyy HH:mm:ss');
\Cake\I18n\FrozenDate::setToStringFormat('dd/MM/yyyy');

 

O código acima vem do plugin admin-br

 

config/bootstrap_cli.php

Neste podemos alterar o comportamento default do bake. Vide admin-br.

 

config/requirements.php

Neste ele verifica a versão mínima exigida do PHP e as duas extensões (intl e mbstring):

 

<?php
if (version_compare(PHP_VERSION, '5.6.0') < 0) {
    trigger_error('Your PHP version must be equal or higher than 5.6.0 to use CakePHP.' . PHP_EOL, E_USER_ERROR);
}

/*
 * You can remove this if you are confident you have intl installed.
 */

if (!extension_loaded('intl')) {
    trigger_error('You must enable the intl extension to use CakePHP.' . PHP_EOL, E_USER_ERROR);
}

/*
 * You can remove this if you are confident you have mbstring installed.
 */

if (!extension_loaded('mbstring')) {
    trigger_error('You must enable the mbstring extension to use CakePHP.' . PHP_EOL, E_USER_ERROR);
}

 

config/routes.php

Neste ele verifica as rotas:

 

Router::scope('/', function (RouteBuilder $routes) {
// Register scoped middleware for in scopes.
$routes->registerMiddleware('csrf', new CsrfProtectionMiddleware([
'httpOnly' => true
]));

/**
* Apply a middleware to the current route scope.
* Requires middleware to be registered via `Application::routes()` with `registerMiddleware()`
*/

$routes->applyMiddleware('csrf');
...

 

E define as rotas default e outras:

$routes->connect('/', ['controller' => 'Users', 'action' => 'login']);

$routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);

 

Detalhes

https://book.cakephp.org/3.0/en/development/configuration.html

Comments fornecido por CComment

Novo Testamento

Àqueles a quem perdoardes os pecados lhes são perdoados; e àqueles a quem os retiverdes lhes são retidos.
(Jo, 20:23)

Rotas no Mapa do Google

© 2015 Ribamar FS. All Rights Reserved. Designed By JoomShaper