Phalcon3のマイクロアプリケーションでDBアクセスするAPIを作成する

Phalcon3のマイクロアプリケーションでDBアクセスするAPIを作成する

マイクロアプリケーションでデータベースアクセスするとなってくるとややこしくなってくるので、ディレクトリ構成を以下のように簡潔にします。

C:.
├─models
└─index.php

view raw
gistfile1.txt
hosted with ❤ by GitHub

PostgreSQLにempuserテーブルが存在するとします。以下DDL文です。

create table "public".empuser (
id integer not null
, firstname character varying(60) not null
, lastname character varying(60) not null
, age integer not null
, primary key (id)
);

view raw
gistfile1.txt
hosted with ❤ by GitHub

このテーブルに対応するモデルはmodels\Empuser.phpとなります。Empuser.phpは一旦以下のようにします。

<?php
namespace App\Models;
use Phalcon\Validation;
class Empuser extends \Phalcon\Mvc\Model
{
public function validation()
{
// とりあえずこれだけ
$validator = new Validation();
}
}

view raw
gistfile1.txt
hosted with ❤ by GitHub

Phalconには決まりごとが多く、データベースにアクセスするには、テーブルに対してモデルが1対1で必要です。

オートローダー

Phalcon\Loaderクラスのオートローダー機能によって、モデルファイルがどこにあるかなどの情報を設定しておきます。

// オートローダー設定
$loader = new Phalcon\Loader();
$loader->registerNamespaces(
[
'App\Models' => __DIR__ . '/models/',
]
);
$loader->register();

view raw
gistfile1.txt
hosted with ❤ by GitHub

DB接続情報

DB接続情報の設定をindex.phpで記述します。

// DB接続情報
$container = new Phalcon\Di\FactoryDefault();
$container->set(
'db',
function () {
return new Phalcon\Db\Adapter\Pdo\Postgresql(
[
'host' => 'localhost',
'port' => 5432,
'username' => 'postgres',
'password' => 'confrage',
'dbname' => 'postgres'
]
);
}
);
$app = new \Phalcon\Mvc\Micro($container);

view raw
gistfile1.txt
hosted with ❤ by GitHub

このDB接続情報を\Phalcon\Mvc\Microクラスのパラメータとして渡す必要があります。

PHQLでSELECT文を発行

Phalcon3ではPHQLという構文があるようです。JPQLみたいなものでしょうか。

App\Modelsが名前空間です。Empuser.phpをSQL文中に指定することができます。

:idxxxx:がプレースホルダーです。

modelsManager->executeQueryの第一引数にPHQL、第二引数に置換変数の配列を指定します。

$app
->modelsManager
->executeQuery(
'SELECT * FROM App\Models\Empuser WHERE id = :idxxxx: ',
[
'idxxxx' => $id
]);
echo json_encode($records);

view raw
gistfile1.txt
hosted with ❤ by GitHub

Phalcon\Http\Responseクラスでレスポンス作成

Phalcon\Http\Responseクラスでレスポンスを作成します。

setJsonContentメソッドに配列を渡せばJSON形式で返してくれます。

setStatusCodeメソッドでHTTPステータスを設定することができます。第二引数に成功時のメッセージを指定します。第二引数省略可能です。

$response = new Phalcon\Http\Response();
// $recordがexecuteQueryメソッドの戻り値
if ($record === false) {
$response->setStatusCode(404); 
$response->setJsonContent(
[
'status' => 'NOT-FOUND'
]
);
} else {
$response->setStatusCode(200);
$response->setJsonContent(
[
'status' => 'FOUND',
'data' => [
'id' => $record[0]->id,
'firstname' => $record[0]->firstname,
'lastname' => $record[0]->lastname,
'age' => $record[0]->age
]
]
);
}
return $response;

view raw
gistfile1.txt
hosted with ❤ by GitHub

これでSelect文発行した結果を返すAPI作成完了です。

Phalcon3のマイクロアプリケーションでDBアクセスするAPIを作成する

https://github.com/takahashi-h5/phalcon-select

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA