NCMB PHP-SDK【PHP7.2で使えない!?】修正方法教えます!

NCMB PHP-SDK【PHP7.2で使えない!?】修正方法教えます!

PHP-SDKを探してみる

PHPでNifty Cloud Mobile Backend(以下Ncmb)を使ってみます。
調べてみると標準でPHP-SDKは提供されていません。

PHPからはREST APIかSDK(*1)での接続になるようです。
※1:標準提供されてないので、ユーザ開発したものになります。

GITで提供されている代表的なSDKをcomposerでセットアップして試してみました。

Ncmb PHPのSDK

  • @koyhoge :Ncmb-PHP SDK
  • @ncmbmania :Ncmb-PHP SDK
10.25追記.@koyhogeさんにツイートでアドバイスもらいました!@ncmbmaniaは@koyhogeさんのforkアイテムのようで、composerを使うには@ncmbmaniaの方を使ってねという事でした

 

@ncmbmania-SDKをセットアップする

@ncmbmaniaのSDK(以下@ncmbmania-SDK)をセットアップします。

@ncmbmania-SDKセットアップ手順

  1. composer.json追加
  2. composerコマンド
  3. autoload.phpの追加

(1)composer.json追加

sshクライアントのviコマンドなどでcomposer.jsonファイルに追加します。

{
 "require": {
  "ncmbmania/php-ncmb": "*"
 }
}

(2)composerコマンド

sshクライアントのホームディレクトリでcomposerコマンドを実行します。

% php composer.phar install

(3)autoload.phpの追加

プロジェクト内の必要な位置でautoload.phpを呼び出します。

require("vendor/autoload.php");
※私の環境の場合にはエラーで呼び出しできない状況が発生していました。
vendorフォルダの位置を相対パスで指定することでエラーが回避できました。

 

データストア接続エラーの修正

Ncmbにデータストアを作成しデモデータを登録します。
@ncmbmania-SDKからの接続プログラムを記述します。

◎サンプル

$appkey = '[apiキー]';
$clientkey = '[クライアントキー]';
NCMB::initialize($appkey, $clientkey);
$className = '[クラス名]';
$query = new Query($className);
$query->equalTo('[検索列]', [検索値]);
$query->find();

@ncmbmania-SDKエラー回避手順

  1. Objectクラス名の変更
  2. Userクラスの継承元変更
  3. ApiClientクラスの変数宣言変更
  4. QueryクラスのObjectクラス名変更

@ncmbmania-SDKのエラーは主にObjectクラスに関する変更とApiClientクラスの変数宣言エラーがあります。

(1)Objectクラス名の変更

Fatal error: Cannot use ‘Object’ as class name as it is reserved in Object.php on line 11
「Objectクラス名が予約語だよ」エラーなのでファイル名変更とObject.phpクラス名を変更します。

(a)sshクライアントなどでレンタルサーバに接続
/ncmbmania/php-ncmb/src/Ncmbフォルダに移動
Object.php→NcmbObject.phpに変更
(b)Object.phpの宣言文修正
[前]11:class Object implements Encodable
[後]11:class NcmbObject implements Encodable

(2)Userクラスの継承元変更

Fatal error: Class ‘Ncmb\Object’ not found in User.php on line 8
「Objectクラス名はないよ」エラーなのでUser.phpの継承元クラス名を変更します。

[前]8:class User extends Object
[後]8:class User extends NcmbObject

(3)ApiClientクラスの変数宣言変更

Fatal error: Uncaught Error: [] operator not supported for strings in ApiClient.php on line 300
「文字列には入らないよ」エラーなのでApiClient.phpの宣言部分を修正します。

[前]295:$encoded_params = ”;
[後]295:$encoded_params = array();

(4)QueryクラスのObjectクラス名変更

Fatal error: Uncaught Error: Class ‘Ncmb\Object’ not found in Query.php on line 135
「Objectクラス名はないよ」エラーなのでQuery.phpの呼び出しクラス名を変更します。

[前]135:$obj = Object::create($this->className, $row[‘objectId’]);
[後]135:$obj = NcmbObject::create($this->className, $row[‘objectId’]);

以上4点の修正で無事に接続できました。

(3)以外はObjectクラスに関するエラーなので、Ncmb\ObjectというようにNamespaceを指定した形であれば変更点が少なくなる可能性はあります。

 

まとめ

Ncmbはスマホアプリなどから使い勝手のよい国産mBaasです。国産ということでサポート体制や日本語情報量も比較的多いようです。

データストアはNoSQLタイプなので更に拡張したいというときにはサービスを呼び出す必要もあるのかなと思います。SDKを使用する事でPHPから簡単にアクセスできるのは魅力です。

今後もNcmb系のサービスを使いながらSDKの情報発信できればなと思います。

Follow me!