CakePHP - Aggiorna un record

Per aggiornare un record nel database, dobbiamo prima ottenere una tabella utilizzando TableRegistryclasse. Possiamo recuperare l'istanza dal registro utilizzando l'estensioneget()metodo. Ilget()metodo prenderà il nome della tabella del database come argomento. Ora, questa nuova istanza viene utilizzata per ottenere un record particolare che vogliamo aggiornare.

Chiama il get()con questa nuova istanza e passare la chiave primaria per trovare un record, che verrà salvato in un'altra istanza. Usa questa istanza per impostare nuovi valori che desideri aggiornare e quindi, infine, chiama il filesave() metodo con il TableRegistry istanza della classe per aggiornare il record.

Esempio

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

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/edit', ['controller' => 'Users', 'action' => 'edit']);
   $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;
   class UsersController extends AppController{
      public function index(){
         $users = TableRegistry::get('users');
         $query = $users->find();
         $this->set('results',$query);
      }
      public function edit($id){
         if($this->request->is('post')){
            $username = $this->request->getData('username');
            $password = $this->request->getData('password');
            $users_table = TableRegistry::get('users');
            $users = $users_table->get($id);
            $users->username = $username;
            $users->password = $password;
            if($users_table->save($users))
            echo "User is udpated";
            $this->setAction('index');
         } else {
            $users_table = TableRegistry::get('users')->find();
            $users = $users_table->where(['id'=>$id])->first();
            $this->set('username',$users->username);
            $this->set('password',$users->password);
            $this->set('id',$id);
         }
      }
   }
?>

Crea una directory Users at src/Template, ignora se è già stato creato e sotto quella directory crea una vista chiamata index.php. Copia il codice seguente in quel file.

src / Template / Users / index.php

<a href="add">Add User</a>
<table>
   <tr>
   <td>ID</td>
   <td>Username</td>
   <td>Password</td>
   <td>Edit</td>
   <td>Delete</td>
   </tr>
   <?php
      foreach ($results as $row):
      echo "<tr><td>".$row->id."</td>";
      echo "<td>".$row->username."</td>";
      echo "<td>".$row->password."</td>";
      echo "<td><a href='".$this->Url->build(["controller" => "Users","action" => "edit",$row->id])."'>Edit</a></td>";
      echo "<td><a href='".$this->Url->build(["controller" => "Users","action" => "delete",$row->id])."'>Delete</a></td></tr>";
      endforeach;
   ?>
</table>

Creane un altro View file nella directory Users chiamata edit.php e copia il codice seguente al suo interno.

src / Template / Users / edit.php

<?php
   echo $this->Form->create(NULL,array('url'=>'/users/edit/'.$id));
   echo $this->Form->control('username',['value'=>$username]);
   echo $this->Form->control('password',['value'=>$password]);
   echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

Esegui l'esempio sopra visitando il seguente URL e fai clic su Edit link per modificare il record.

http: // localhost / cakephp4 / users

Produzione

Dopo aver visitato l'URL sopra, verranno visualizzati i record nella tabella degli utenti come mostrato di seguito:

Fare clic sul pulsante Modifica e verrà visualizzata la seguente schermata:

Ora aggiorneremo il nome Virat a Virat123 e invieremo i dettagli. La schermata successiva visualizzata sarà la seguente: