対象の読者
CakePHPで登録フォームからデータベースに登録する方法を知りたい方
検証環境
■Windows11
■CakePHP(version 4.5.7)
TableRegistry(ORMクラス)を使うと便利
TableRegistryクラスとは、テーブルを作るための様々な依存関係を提供します。
今回だと、TableRegistryクラスを使って、①エンティティの作成と②save()メソッドを使って登録できるといった
恩恵を受けられます。(CakePHPのTableRegiostryに関する公式情報はこちら↓)
早速ですが、TableRegistryクラスを使ったケースを見てみましょう。
【処理の流れ】
①RegisterController.phpの名前空間の下に、TableRegistryをインポートしておく。
RegisterController.php
<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\ORM\TableRegistry;/*インポートしておく*/
~(以降は、省略)~
②index.phpの登録フォームをRegisterController.phpのregister()メソッドへPOST通信する。
③データを入れるためのテーブルを指定する。
//データを格納するための対象テーブル情報を取得する
$usersTable = TableRegistry::getTableLocator()->get('users');
④エンティティを新規作成する。
//エンティティを生成する。
$newUsers = $this->usersTable->newEmptyEntity();
⑤エンティティにデータを詰めていく
//エンティティのカラム名に画面から取得したデータを渡す
$newUsers->name = $yourName;
$newUsers->password = $password;
$newUsers->role_id = 0;
$newUsers->created = '2024-10-01';
$newUsers->modified = '2024-10-02';
⑥テーブルにデータを登録する
//テーブルへ登録する。
$this->usersTable->save($newUsers);
画面からサーバにデータを渡して登録するまでの、全コードはこちらになります↓
templates/Registers/index.php
<h1>ログインフォーム</h1>
<div class="registerFormArea">
<form id="registerForm" class="" method="post" action="/registers/register" name="form">
<input type="hidden" name="_csrfToken" value="<?= $this->request->getAttribute('csrfToken') ?>"/>
<!--名前-->
<input type="text" id="yourNAme" name="yourNAme" class="yourNAme"/>
<!--メールアドレス-->
<input type="email" id="yourEmail" name="yourEmail" class="yourEmail"/>
<!--パスワード-->
<input type="password" id="yourPassword" name="yourPassword" class="yourPassword"/>
</form>
<button type="submit" class="btn" form="registerForm">
送信
</button>
</div>
RegisterController.php
<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\ORM\TableRegistry;/*追加*/
/**
* Registers Controller
*
* @method \App\Model\Entity\Register[]|\Cake\Datasource\ResultSetInterface paginate($object = null, array $settings = [])
*/
class RegistersController extends AppController
{
public function initialize(): void
{
parent::initialize();
//companiesのDBを指定
$this->usersTable = TableRegistry::get('users');
}
/**
* Index method
*
* @return \Cake\Http\Response|null|void Renders view
*/
public function index()
{
/*
$registers = $this->paginate($this->Registers);
$this->set(compact('registers'));
*/
}
/**
* View method
*
* @param string|null $id Register id.
* @return \Cake\Http\Response|null|void Renders view
* @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
*/
public function view($id = null)
{
$register = $this->Registers->get($id, [
'contain' => [],
]);
$this->set(compact('register'));
}
/**
* Add method
*
* @return \Cake\Http\Response|null|void Redirects on successful add, renders view otherwise.
*/
public function add()
{
$register = $this->Registers->newEmptyEntity();
if ($this->request->is('post')) {
$register = $this->Registers->patchEntity($register, $this->request->getData());
if ($this->Registers->save($register)) {
$this->Flash->success(__('The register has been saved.'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('The register could not be saved. Please, try again.'));
}
$this->set(compact('register'));
}
/**
* Edit method
*
* @param string|null $id Register id.
* @return \Cake\Http\Response|null|void Redirects on successful edit, renders view otherwise.
* @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
*/
public function edit($id = null)
{
$register = $this->Registers->get($id, [
'contain' => [],
]);
if ($this->request->is(['patch', 'post', 'put'])) {
$register = $this->Registers->patchEntity($register, $this->request->getData());
if ($this->Registers->save($register)) {
$this->Flash->success(__('The register has been saved.'));
return $this->redirect(['action' => 'index']);
}
$this->Flash->error(__('The register could not be saved. Please, try again.'));
}
$this->set(compact('register'));
}
/**
* Delete method
*
* @param string|null $id Register id.
* @return \Cake\Http\Response|null|void Redirects to index.
* @throws \Cake\Datasource\Exception\RecordNotFoundException When record not found.
*/
public function delete($id = null)
{
$this->request->allowMethod(['post', 'delete']);
$register = $this->Registers->get($id);
if ($this->Registers->delete($register)) {
$this->Flash->success(__('The register has been deleted.'));
} else {
$this->Flash->error(__('The register could not be deleted. Please, try again.'));
}
return $this->redirect(['action' => 'index']);
}
public function register()
{
$this->request->is('post');
$yourName = $this->request->getData('yourNAme');
debug($yourName);
$email = $this->request->getData('yourEmail');
$password = $this->request->getData('yourPassword');
//debug($email);
$this->set('id',$yourName);
//データを格納するための対象テーブル情報を取得する
$usersTable = TableRegistry::getTableLocator()->get('users');
//エンティティを生成する。
$newUsers = $this->usersTable->newEmptyEntity();
//エンティティのカラム名に画面から取得したデータを渡す
$newUsers->name = $yourName;
$newUsers->password = $password;
$newUsers->role_id = 0;
$newUsers->created = '2024-10-01';
$newUsers->modified = '2024-10-02';
//テーブルへ登録する。
$this->usersTable->save($newUsers);
//return $this->response->withStringBody($yourName);
return $this->redirect(['action' => 'success']);
}
public function success()
{
//$yourName = 1;
//debug($email);
//$this->set('yourName',$yourName);
//return $this->redirect(['action' => 'success']);
}
}
以上です。
サンクスサイト
■カモメのススメ様 cakephp4テーブルにデータを登録する方法
■カモメのススメ様 cakephp4でコントローラーの作成手順!コントローラーの特徴も解説