CakePHP - Trabalhando com Banco de Dados
Trabalhar com banco de dados no CakePHP é muito fácil. Vamos entender as operações CRUD (Criar, Ler, Atualizar, Excluir) neste capítulo.
Além disso, também precisamos configurar nosso banco de dados em config/app_local.php file.
'Datasources' => [
'default' => [
'host' => 'localhost',
'username' => 'my_app',
'password' => 'secret',
'database' => 'my_app',
'url' => env('DATABASE_URL', null),
],
/*
* The test connection is used during the test suite.
*/
'test' => [
'host' => 'localhost',
//'port' => 'non_standard_port_number',
'username' => 'my_app',
'password' => 'secret',
'database' => 'test_myapp',
//'schema' => 'myapp',
],
],
A conexão padrão tem os seguintes detalhes -
'host' => 'localhost',
'username' => 'my_app',
'password' => 'secret',
'database' => 'my_app',
Você pode alterar os detalhes, ou seja, host, nome de usuário, senha e banco de dados de acordo com sua escolha.
Feito isso, certifique-se de que ele esteja atualizado em config / app_local.php no objeto Datasources.
Agora, continuaremos com os detalhes acima, vá para o banco de dados phpmyadmin ou mysql e crie o usuário my_app como mostrado abaixo -
Dê os privilégios necessários e salve-o. Agora, temos os detalhes do banco de dados de acordo com a configuração mencionada em app_local.php. Quando você verifica a página inicial do CakePHP, isto é o que você deve obter -
Agora, vamos criar a seguinte tabela de usuários no banco de dados.
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(255) NOT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
Insira um registro
Para inserir um registro no banco de dados, primeiro precisamos obter uma tabela usando TableRegistryclasse. Podemos buscar a instância fora do registro usandoget()método. oget() método tomará o nome da tabela do banco de dados como argumento.
Esta nova instância é usada para criar uma nova entidade. Defina os valores necessários com a instância da nova entidade. Agora temos que ligar para osave() método com TableRegistry instância da classe que irá inserir novo registro no banco de dados.
Exemplo
Faça alterações no config/routes.php arquivo conforme mostrado no programa a seguir.
config/routes.php
<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
$builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
'httpOnly' => true,
]));
$builder->applyMiddleware('csrf');
//$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
$builder->connect('/users/add', ['controller' => 'Users', 'action' => 'add']);
$builder->fallbacks();
});
Criar uma UsersController.php arquivo em src/Controller/UsersController.php. Copie o código a seguir no arquivo do controlador.
src/controller/UsersController.php
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;
use Cake\Auth\DefaultPasswordHasher;
class UsersController extends AppController{
public function add(){
if($this->request->is('post')){
$username = $this->request->getData('username');
$hashPswdObj = new DefaultPasswordHasher;
$password = $hashPswdObj->hash($this->request->getData('password'));
$users_table = TableRegistry::get('users');
$users = $users_table->newEntity($this->request->getData());
$users->username = $username;
$users->password = $password;
$this->set('users', $users);
if($users_table->save($users))
echo "User is added.";
}
}
}
?>
Crie um diretório Users em src/Template e sob esse diretório crie um Viewarquivo chamado add.php. Copie o código a seguir nesse arquivo.
src/Template/Users/add.php
<?php
echo $this->Form->create(NULL,array('url'=>'/users/add'));
echo $this->Form->control('username');
echo $this->Form->control('password');
echo $this->Form->button('Submit');
echo $this->Form->end();
?>
Execute o exemplo acima visitando o seguinte URL. http: // localhost / cakephp4 / users / add
Resultado
Após a execução, você receberá a seguinte saída.
Os dados serão salvos na tabela de usuários conforme mostrado abaixo -