どうも。CakePHPを初めて3日目のReoです。
FirebaseをCakePHPで使ってみようと思って調べてみると、意外にも全然ヒットしませんでした。なので手順を残しておこうと思います。
でも、ヒットしないってことはそもそもCakePHPでFirebaseを使うってのは悪手なのか?!って思わないこともないので、そういう意見があれば是非お聞かせください。
環境
今回導入してみた環境は、
- CakePHP 3.6.10
- CentOS 7.3
- PHP 7.2.9
です。
この環境構築自体は「Cakephp3 + CentOS7 + Vagrant + Apache + MySQL 環境セットアップ」の記事を見て構築しました。
あとはvagrant-hostupdaterを使ってvagtrantwork.comでアクセスできるようにしています。
Firebaseの方は「GitHub - kreait/firebase-php: Firebase Admin PHP SDK」を用いています。
実装はほぼ「 Firebase Admin SDK for PHP Documentation」のままです。
英語は読むのに労力がいるので、メモするぜ!っていうわけです。
Firebaseで新規プロジェクトを作成する
Firebaseにログインし、プロジェクトを作成します。
公式ドキュメントの「アプリにFirebaseを追加する」の通りに操作し、まずは「プロジェクト名-firebase-adminsdk-hogehoge.json」というJSON形式のファイルをゲットします。
これを適当に「firebase_credentials.json」という名前に変更して、
自分はとりあえず アプリケーションフォルダの直下にfirebaseというディレクトリを作り、その中にいれました。これをちゃんと非公開ディレクトリにしておかないとなのですが、その部分は割愛。
SDKを導入する
次に、SDKを導入します。GitHub - kreait/firebase-php: Firebase Admin PHP SDKですね。
アプリケーションフォルダ直下のcomposer.json内に以下を追記します。
"require": {
// require内に追記
"kreait/firebase-php": "^4.0"
},
そいで、vagrant sshで接続し、composer updateします。
vagrant ssh
cd /var/www/html/アプリ名
composer update
composer.lock内にkreaitが入っていればおkです。
これで導入はおkのはずです!
動作確認をしてみよう!
まずは使ってみましょう。
適当にsrc/Controller内に新しくHogeController.phpを追加します。
そしてFirebaseを使えるようにします。
<?php
namespace App\Controller;
use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;
class HogeController extends AppController {
public function initialize() {
$this->autoRender = false; // viewを用意しないで動かしたい
}
public function index() {
}
}
viewを用意するのが面倒なので、とりあえずautoRenderをfalseにしておきます。
この状態で ドメイン/アプリ名/hoge(vagrantwork.com/test-fb/hoge等) にアクセスしてみて、エラーが出てなければcomposerでの導入は上手くいっているはずです。
エラーが出るようならcomposer.lockにkreaitが上手く入っているかどうかのチェックをすると良いと思います。
次に、DBの取得をしてエラーが出ないかの確認をします。
public function initialize() {
$this->autoRender = false; // viewを用意しないで動かしたい
$serviceAccount = ServiceAccount::fromJsonFile( ROOT . '/firebase/firebase_credentials.json' );
$firebase = (new Factory)->withServiceAccount($serviceAccount)->create();
$firebase = (new Factory)
->withServiceAccount($serviceAccount)
->withDatabaseUri('https://プロジェクト名.firebaseio.com') // Firebase側でつけたプロジェクト名
->create();
$database = $firebase->getDatabase();
}
4行目のServiceAccount::fromJsonFileは、最初にFirebaseからダウンロードして配置したJSONファイルまでのパスを書いてください。
9行目の部分はFirebase側でつけたプロジェクト名を書いてください。
これでもう一度アクセスしてみて、エラーが出てなければおkです。上手くいかない場合はおそらくJSONファイルまでのパスがおかしいのだと思われます。
あとは実際にデータを飛ばして確認してみます。
class HogeController extends AppController {
public $dbData = [];
public function initialize() {
$this->autoRender = false; // viewを用意しないで動かしたい
$serviceAccount = ServiceAccount::fromJsonFile(ROOT . '/firebase/firebase_credentials.json');
$firebase = (new Factory)->withServiceAccount($serviceAccount)->create();
$firebase = (new Factory)
->withServiceAccount($serviceAccount)
->withDatabaseUri('https://プロジェクト名.firebaseio.com')
->create();
$database = $firebase->getDatabase();
// 適当に飛ばしてテストしてみるよ
$newPost = $database
->getReference('blog/posts')
->push([
'title' => 'タイトル',
'body' => 'ここに内容を適当に書いておくよ。テストだよ。'
]);
$this->dbData['key'] = $newPost->getKey();
$this->dbData['uri'] = $newPost->getUri();
$newPost->getChild('title')->set('NEWタイトル');
$this->dbData['value'] = $newPost->getValue(); // リアルタイムDBからフェッチ
$newPost->remove(); // 削除しておく
}
public function index() {
echo 'Key: ' . $this->dbData['key'];
echo 'URI: ' . $this->dbData['uri'];
var_dump($this->dbData['value']) // 配列が入っているはず;
}
}
一度DBにポストして、そのデータを書き換えて、最後にリムーブしています。 途中書き換えたデータを拾って、変数に入れておき、出力しています。
これで出力結果にNEWタイトルが含まれていればうまくいっているはずです。
終わりに
はい、これで一応Firebaseの導入自体はできました。
この記事自体ドキュメントのまんまといえばまんまです。(ドキュメントはcakephpではないけれど)
なので、あとは「 Firebase Admin SDK for PHP Documentation」を参照していただければと思います。
ドキュメント通りにやって何かハマることがあれば、また随時記事にしようと思います。
CakePHPもFirebaseも超絶初心者なのですが、参考になれば嬉しいです。ではでは〜
コメントはありません。
現在コメントフォームは工事中です。