CakePHP - Zaktualizuj rekord
Aby zaktualizować rekord w bazie danych, musimy najpierw zdobyć tabelę za pomocą TableRegistryklasa. Możemy pobrać instancję z rejestru za pomocą rozszerzeniaget()metoda. Plikget()Metoda przyjmie nazwę tabeli bazy danych jako argument. Teraz ta nowa instancja jest używana do pobierania konkretnego rekordu, który chcemy zaktualizować.
Zadzwoń do get()z tą nową instancją i przekaż klucz podstawowy, aby znaleźć rekord, który zostanie zapisany w innej instancji. Użyj tego wystąpienia, aby ustawić nowe wartości, które chcesz zaktualizować, a następnie ostatecznie wywołajsave() metoda z TableRegistry instancja klasy, aby zaktualizować rekord.
Przykład
Wprowadź zmiany w pliku config / tours.php, jak pokazano w poniższym kodzie.
config / tours.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();
});
Stwórz UsersController.php plik w src/Controller/UsersController.php. Skopiuj następujący kod w pliku kontrolera.
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);
}
}
}
?>
Utwórz katalog Users at src/Template, zignoruj, jeśli już został utworzony, i w tym katalogu utwórz widok o nazwie index.php. Skopiuj następujący kod w tym pliku.
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>
Utwórz kolejny View plik w katalogu Users o nazwie edit.php i skopiuj w nim następujący kod.
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();
?>
Wykonaj powyższy przykład, odwiedzając następujący adres URL i kliknij Edit link edytować rekord.
http: // localhost / cakephp4 / users
Wynik
Po odwiedzeniu powyższego adresu URL wyświetli rekordy w tabeli użytkowników, jak pokazano poniżej -
Kliknij przycisk Edytuj, aby wyświetlić następujący ekran -
Teraz zaktualizujemy nazwę Virat do Virat123 i prześlemy szczegóły. Następny wyświetlany ekran będzie wyglądał następująco -