仕事で久しぶりにCakePHPを使うことになったので、DBの読み書きがある簡単なスコア登録アプリを作ってみました。
スコア登録アプリとは、
・名前と点数を入力して登録できる。
・登録したスコアを一覧表示できる。
というものです。
環境
CentOS7
MariaDB 5.5.60
PHP 7.2.9
CakePHP 2.10.11
サーバーIP:192.168.56.101
ドキュメントルート:/var/www/html/
CakePHPのファイル:/var/www/html/cakephp/
※ WindowsのVirtualBoxを使用。
※ 環境構築の手順は省略します。
※ 前提としてCakePHPの初期設定は終わっているものとします。
データベースの準備
スコア登録アプリで使うデータベースを作成します。
# MySQLにログイン
$ mysql -u root
-- DB作成
CREATE DATABASE cakedb;
USE cakedb;
-- テーブル作成
CREATE TABLE scores (
id INT AUTO_INCREMENT PRIMARY KEY,
name TEXT,
score INT
);
-- ユーザー作成
-- ユーザー名:cake_user パスワード:cake_20180903
CREATE USER 'cake_user'@'localhost' IDENTIFIED BY 'cake_20180903';
-- 権限付与
GRANT ALL ON cakedb.* TO cake_user;
CakePHPのデータベース設定
デフォルトの設定ファイルをコピーします。
cp /var/www/html/cakephp/Config/database.php.default /var/www/html/cakephp/Config/database.php
database.phpの接続先を編集します。
app/Config/database.php
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'cake_user',
'password' => 'cake_20180903',
'database' => 'cakedb',
'prefix' => '',
'encoding' => 'utf8',
);
スコア入力画面
スコア入力画面のコントローラーです。
app/Controller/InputController.php
<?php
App::uses('AppController', 'Controller');
class InputController extends AppController
{
public function index()
{
}
}
?>
ビューを作成します。
app/View/Input/index.ctp
スコアを登録
<form action="/cakephp/insert" method="POST">
名前:
<input type="text" name="name">
点数:
<input type="text" name="score">
<input type="submit" value="登録">
</form>
URLにアクセスします。
http://192.168.56.101/cakephp/input/
入力画面が表示されるので、名前と点数を入力して登録します。
スコア登録完了画面
スコア登録完了画面のコントローラーです。
app/Controller/InsertContr
<?php
App::uses('AppController', 'Controller');
class InsertController extends AppController
{
public function index()
{
// formのデータを取得
$name = $this->request->data('name');
$score = $this->request->data('score');
// パラメータがなければ入力画面にリダイレクト
if (empty($name) || empty($score)) {
$this->redirect('../input');
}
// モデルをロード
$this->loadModel('Scores');
// scoresテーブルに保存
$this->Scores->save(array('name' => $name, 'score' => $score));
}
}
?>
ビューを作成します。
app/View/Insert/index.ctp
スコアを登録しました。
スコア一覧画面
スコア一覧画面のコントローラーです。
app/Controller/ListController.php
<?php
App::uses('AppController', 'Controller');
class ListController extends AppController
{
public function index()
{
$this->loadModel('Scores');
// scoresのデータを全て取得
$result = $this->Scores->find('all');
// ビューにセット
$this->set('result', $result);
}
}
?>
ビューを作成します。
app/View/List/index.ctp
<?php foreach ($result as $data) { ?>
<?php echo $data['Scores']['name']; ?>さん:<?php echo $data['Scores']['score']; ?>点<br />
<?php } ?>
URLにアクセスします。
http://192.168.56.101/cakephp/list/
登録したスコアが表示されました。
以上で終わりです。