0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【CakePHP】登録フォームからデータベースに登録する方法

Posted at

対象の読者

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でコントローラーの作成手順!コントローラーの特徴も解説

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?