cakephp3・ajax・jqueryのPOSTをmysqlに格納するサンプル

cakephp3

cakephp3・ajaxでmysqlのテーブルにデータを登録してみます。

仕様

  1. 二つのテキストボックスにそれぞれ名前とパスワードを入力した後に送信ボタンを押す
  2. 画面が更新されることなく入力したデータが以下のusertblsに登録される
  3. データの登録をお知らせするアラートが出て終了

テーブル

IDは自動採番。
テーブル名はusertbls。テーブル名の最後に必ずsをつけるのが約束事らしい。

サンプルコード

ルートディレクトリ以下にsampleというプロジェクトを立ち上げています。

以下、ルートディレクトリ/sample/dataadd/にアクセスすると登録画面が表示されるという設定です。

ファイル一覧

  • routes.php
  • dataadd.ctp(/src/Template/Layout/):レイアウト用
  • dataadd.ctp(/src/Templete/Dataadd/):レイアウト用
  • add.js:ajax制御用
  • DataaddController.php:登録画面表示用
  • AddController.php:データ登録用
  • Usertbl.php:テーブル操作用
  • UsertblsTable.php:テーブル操作用

後、公式サイトから持ってきたjquery。

routes.php

一行目がページを表示するためのコードで、
二行目が送信ボタンをクリック時→データ登録の挙動をするコードになります。

dataadd.ctp(/src/Template/Layout/)

レイアウトです。jqueryとajax用のadd.js、二つを読み込みます。

dataadd.ctp(/src/Templete/Dataadd/)

Layout/dataadd.ctpのbodyの中身です。

add.js(/webroot/js/)

データをPOSTで渡してから、戻ってきた文字列によってデータ登録の成否をお知らせ。

DataaddController.php(/src/Controller/)

登録画面表示用のコントローラー。

AddController.php(/src/Controller/)

テーブルを操作するために

を追加します。

autoRenderをFALSEにする

これでcakephpのページのレンダリング機能をオフにします。

cakephpではレイアウトのctpファイルを読み込んでページを構成して表示する仕組みになっていますが、このautoRenderをオフにするとレイアウトファイルを読み込まなくなります。

AddController.phpの目的はデータをテーブルに登録してから’0’か’1’を表示させて、add.jsにそれを渡すことですので、ctpファイルを読み込む必要がありません。

ちなみにこの行を追加しないで処理を実行すると

エラーログにレイアウトのadd.ctpが行方不明なんだけど?と書かれます。

autoRenderをオフにしてレイアウトのctpファイルを勝手に読み込みにいくのを防ぎましょう。

モデル作成

データベースを操作するためにモデルを作成します。
モデル作成のために以下のコードをコンソールに入力。

成功するとこんな感じになります↓(これの例はhogehoge)

データベースのためのモデルを作成する

モデルが自動生成される。

テーブル名に大文字があるとエラーになる

ちなみにテーブル名に大文字が含まれているとエラーになる模様。

これはuserTBLsというテーブル名でモデルを作成しようと試みたんですが、コンソールを見るとuser_t_b_lsになっている。

  • Usertbl.php(/src/Model/Entity/)
  • UsertblsTable.php(/src/Model/Table/)

成功すると以上の二つのファイルが自動生成されます。これらの生成されたモデルはそのまま使えますので特に何も修正する必要はないです。

↓laravel5で同じことやる

laravel5・ajax・mysqllaravel5・ajax・jqueryのPOSTをmysqlに格納するサンプル
laravel5・ajaxでmysqlのテーブルにデータを登録してみます。