CakePHP - Mettre à jour un enregistrement

Pour mettre à jour un enregistrement dans la base de données, nous devons d'abord mettre la main sur une table en utilisant TableRegistryclasse. Nous pouvons extraire l'instance du registre en utilisant leget()méthode. leget()La méthode prendra le nom de la table de la base de données comme argument. Maintenant, cette nouvelle instance est utilisée pour obtenir un enregistrement particulier que nous voulons mettre à jour.

Appeler le get()avec cette nouvelle instance et transmettez la clé primaire pour trouver un enregistrement, qui sera sauvegardé dans une autre instance. Utilisez cette instance pour définir de nouvelles valeurs que vous souhaitez mettre à jour, puis appelez enfin lesave() méthode avec la TableRegistry l'instance de la classe pour mettre à jour l'enregistrement.

Exemple

Apportez des modifications dans le fichier config / routes.php comme indiqué dans le code suivant.

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

Créer un UsersController.php déposer à src/Controller/UsersController.php. Copiez le code suivant dans le fichier du contrôleur.

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

Créer un annuaire Users at src/Template, ignorer si déjà créé, et sous ce répertoire créer une vue appelée index.php. Copiez le code suivant dans ce fichier.

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>

Créer un autre View fichier sous le répertoire Utilisateurs appelé edit.php et copiez-y le code suivant.

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

Exécutez l'exemple ci-dessus en visitant l'URL suivante et cliquez sur Edit link pour modifier l'enregistrement.

http: // localhost / cakephp4 / utilisateurs

Production

Après avoir visité l'URL ci-dessus, il affichera les enregistrements dans le tableau des utilisateurs comme indiqué ci-dessous -

Cliquez sur le bouton Modifier et il vous affichera l'écran suivant -

Maintenant, nous allons mettre à jour le nom Virat en Virat123 et soumettre les détails. L'écran suivant affiché sera le suivant -