CakePHP - Supprimer un enregistrement

Pour supprimer un enregistrement dans la base de données, nous devons d'abord mettre la main sur une table en utilisant le TableRegistryclasse. Nous pouvons extraire l'instance du registre en utilisant leget()méthode. La méthode get () 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 supprimer.

Appeler le get()avec cette nouvelle instance et passez la clé primaire pour trouver un enregistrement qui sera sauvegardé dans une autre instance. Utilisez l'instance de la classe TableRegistry pour appeler ledelete méthode pour supprimer l'enregistrement de la base de données.

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/delete', ['controller' => 'Users', 'action' => 'delete']);
   $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 delete($id){
         $users_table = TableRegistry::get('users');
         $users = $users_table->get($id);
         $users_table->delete($users);
         echo "User deleted successfully.";
         $this->setAction('index');
      }
   }
?>

Créez simplement un vide View fichier sous Users répertoire appelé delete.ctp.

src / Template / Users / delete.ctp

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

src / Template / Users / index.ctp

<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>

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

http: // localhost: 85 / CakePHP / utilisateurs

Production

Après avoir visité l'URL ci-dessus et cliqué sur le lien Supprimer, vous recevrez la sortie suivante où vous pouvez supprimer l'enregistrement.

Cliquez sur le lien Supprimer pour supprimer l'enregistrement.