CakePHP - Lavorare con il database

Lavorare con il database in CakePHP è molto semplice. Comprenderemo le operazioni CRUD (Crea, Leggi, Aggiorna, Elimina) in questo capitolo.

Inoltre, dobbiamo anche configurare il nostro database in 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',
   ],
],

La connessione predefinita ha i seguenti dettagli:

'host' => 'localhost',
   'username' => 'my_app',
   'password' => 'secret',
   'database' => 'my_app',

È possibile modificare i dettagli, ovvero host, nome utente, password e database secondo la propria scelta.

Una volta fatto, assicurati che sia aggiornato in config / app_local.php nell'oggetto Datasources.

Ora, continueremo con i dettagli sopra, andremo al tuo database phpmyadmin o mysql e creeremo l'utente my_app come mostrato di seguito -

Assegna i privilegi necessari e salvalo. Ora, abbiamo i dettagli del database secondo la configurazione menzionata in app_local.php. Quando controlli la home page di CakePHP, questo è ciò che dovresti ottenere -

Ora creeremo la seguente tabella degli utenti nel database.

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

Inserisci un record

Per inserire un record nel database, dobbiamo prima ottenere una tabella utilizzando TableRegistryclasse. Possiamo recuperare l'istanza dal registro utilizzandoget()metodo. Ilget() metodo prenderà il nome della tabella del database come argomento.

Questa nuova istanza viene utilizzata per creare una nuova entità. Imposta i valori necessari con l'istanza della nuova entità. Ora dobbiamo chiamare il filesave() metodo con TableRegistry istanza della classe che inserirà un nuovo record nel database.

Esempio

Apporta modifiche nel file config/routes.php file come mostrato nel seguente programma.

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();
});

Creare un UsersController.php file in src/Controller/UsersController.php. Copiare il codice seguente nel file del controller.

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.";
      }
   }
}
?>

Crea una directory Users a src/Template e in quella directory creare un file Viewfile chiamato add.php. Copia il codice seguente in quel file.

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();
?>

Esegui l'esempio precedente visitando il seguente URL. http: // localhost / cakephp4 / users / add

Produzione

Dopo l'esecuzione, riceverai il seguente output.

I dati verranno salvati nella tabella utenti come mostrato di seguito -