CakePHP - Actualizar un registro
Para actualizar un registro en la base de datos, primero necesitamos obtener una tabla usando TableRegistryclase. Podemos sacar la instancia del registro usando elget()método. losget()El método tomará el nombre de la tabla de la base de datos como argumento. Ahora, esta nueva instancia se usa para obtener un registro particular que queremos actualizar.
Llama a get()con esta nueva instancia y pase la clave principal para encontrar un registro, que se guardará en otra instancia. Utilice esta instancia para establecer nuevos valores que desee actualizar y, finalmente, llame alsave() método con el TableRegistry instancia de la clase para actualizar el registro.
Ejemplo
Realice cambios en el archivo config / routes.php como se muestra en el siguiente código.
config / route.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();
});
Crear un UsersController.php archivar en src/Controller/UsersController.php. Copie el siguiente código en el archivo del controlador.
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 un directorio Users at src/Template, ignore si ya está creado, y en ese directorio cree una vista llamada index.php. Copie el siguiente código en ese archivo.
src / Plantilla / Usuarios / 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>
Crea otro View archivo en el directorio de usuarios llamado edit.php y copie el siguiente código en él.
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();
?>
Ejecute el ejemplo anterior visitando la siguiente URL y haga clic en Edit link para editar el registro.
http: // localhost / cakephp4 / users
Salida
Después de visitar la URL anterior, mostrará los registros en la tabla de usuarios como se muestra a continuación:
Haga clic en el botón Editar y se le mostrará la siguiente pantalla:
Ahora, actualizaremos el nombre Virat a Virat123 y enviaremos los detalles. La siguiente pantalla que se mostrará será la siguiente: