ver.2サポートサイト

HOME機能サイト管理サイトPHP

PHP

サイト内のページ(ソース設定)にて、PHPを実行することができます。
実行結果はThymeleafを使用し、ページのbody(ソース設定)およびブロック(ソース設定)に渡すことができます。
外部サービスのAPIやSPIRAL ver.2のAPIと連携することで、多機能なアプリケーションを構築することができます。

仕様

SPIRAL ver.2で提供するPHPの構成

各機能の役割

機能 説明
PHP

実行するプログラムを記述します。

実行結果をechoやprint_r()でPHP設定画面に出力することはできません。Thymeleaf経由でページに表示します。

Thymeleafに値をセットする方法などはこちらをご覧ください。

Thymeleaf

PHPの実行結果を受け取り、ページおよび認証エリアに渡します。

ページおよび認証エリアページのbody(ソース設定)およびブロック(ソース設定)

Thymeleafを使用して、PHPの実行結果を画面に表示します。

エラー発生時はエラー文言を画面に表示します。

ThymeleafでPHP実行結果を呼び出す方法はこちらをご覧ください。

PHP環境変数

APIキーやAPIエンドポイントURLなど、サイト内で何度も使用する値を登録しておき、独自クラス「$SPIRAL」を使用して、ページのPHPやPHPモジュールで呼び出すことができます。
テスト環境と本番環境で、値を切り替えることが可能です。

設定方法については、こちらをご覧ください。

PHPモジュール

APIへのリクエストなど、サイト内で何度も使用するPHPプログラムを登録しておき、ページのPHPやPHPモジュールで呼び出すことができます。

PHPモジュールの仕様については、こちらをご覧ください。

PHPエラーログ

ページのPHPでエラーが発生した場合、エラーログを確認することができます。

PHPエラーログの仕様については、こちらをご覧ください。

設定順

1.ページのPHPタブにプログラムを設定します。
 必要に応じて、PHP環境変数やPHPモジュールを呼び出します。
2.Thymeleafに実行結果をセットします。

3.ページや認証エリアのbodyタブやブロックのソースにて、Thymeleafで値を呼び出します。

提供するPHPのバージョン

使用可能なPHPバージョンについてはPHPバージョンについてをご参照ください。

PHP実行タイミング

PHPを記載しているページへアクセスした時、PHPを実行します。

 

以下の順で処理されます。
1.PHP
2.Thymeleaf
3.body(head、CSS、JavaScript)
※フォームで使用する ${values['f0XXX']} などのコードはThymeleaf機能上で処理されます。
※CSS/JavaScriptの記述場所による実行順についてはこちらをご参照ください。

設定できるPHPの数とサイズ

1つのページにつき、1つのPHPソース(最大300,000bytes)を設定できます。

利用方法

PHPの基本的な設定方法

1.ページ

ページでPHPを使用する場合、サイト管理>サイト>ページ一覧>ページにて、「PHP」タブを表示し、プログラムを記述します。

2.認証エリア

認証エリアページでPHPを使用する場合、サイト管理>サイト>認証エリア>認証エリアページにて、「PHP」タブを表示し、プログラムを記述します。

PHPの実行バージョン
指定可能なPHPの実行バージョンを設定できます。
サイト機能については、サイト単位ごとに設定するPHPバージョンと、各ページごとに設定するPHPバージョンの指定があります。
詳細はPHPバージョンについてをご確認ください。

独自クラス・関数

PHP実行結果をThymeleafに渡したり、認証エリアの機能である認証レコード値をPHPで取得するなど、PHPを使いやすくするため、独自クラス「$SPIRAL」を用意しています。

以下の関数を使用できます。

setTHValue($key, $value)

PHP実行結果をThymeleafにセットします。

$valueはオブジェクトも扱えます。

シンプルなデータ
PHP
<?php
 $SPIRAL->setTHValue("seminar","LINE活用セミナー");
?>
body
<!-- LINE活用セミナー -->
<p th:text="${cp.result.value['seminar']}"></p>

オブジェクトを扱う場合
PHP
<?php
class Student{
   public $name;
   public $age;
}

$student = new Student();
$student->name = "鈴木一郎";
$student->age = "26";

$SPIRAL->setTHValue("student", $student);
?>
body
<!-- 鈴木一郎-->
<p th:text="${cp.result.value['student'].name}"></p>
<!-- 26-->
<p th:text="${cp.result.value['student'].age}"></p>

setTHValues($array)

PHP実行結果をThymeleafに複数個まとめてセットします。

$arrayは連想配列である必要があります。

PHP
$arrayparam = array("name"=>"スパイラル太郎","email"=>"spiral@spiral-platform.co.jp");
$SPIRAL->setTHValues($arrayparam);
body
<!-- 鈴木一郎-->
<p th:text="${cp.result.value['name']}"></p>
<!-- spiral@spiral-platform.co.jp-->
<p th:text="${cp.result.value['email']}"></p>

getEnvValue($key)

PHP環境変数を呼び出します。

PHP
//APIURL、APIキーを取得
$apiurl = $SPIRAL->getEnvValue("apiurl");
$apikey = $SPIRAL->getEnvValue("apikey");

getAuthRecordByFieldId($fieldId)

認証エリアのPHPにて、認証レコード値を取得します。

$fieldIdには、値を取得するフィールドのID(1、2など)を指定します。

PHP
//認証レコード値を取得
$SPIRAL->getAuthRecordByFieldId("1");
フィールドのIDを確認する方法

アプリ管理>DB>フィールドから、IDを確認します。

getParam($paramName)

別のページからGETやPOSTで送信されてきた値やクエリパラメータの値を一つ取得します。
同じパラメータ名で送信されてきた場合、1つのみ取得します。
GETとPOSTで同じパラメータ名で送信されてきた場合、POSTで送信されたきた値を優先して取得します。

PHP
//パラメータを取得
$SPIRAL->getParam("seminar_id");

getParams($paramName)

別のページから送信されてきた配列やクエリパラメータの配列を取得します。

PHP
//パラメータを配列で取得
$SPIRAL->getParams("seminar_id");

getQueryParam($paramName)

ページURLのクエリパラメータの値を一つ取得します。

PHP
//パラメータを取得
$SPIRAL->getQueryParam("seminar_id");

getQueryParams($paramName)

ページURLのクエリパラメータの配列を取得します。

PHP
//パラメータを取得
$SPIRAL->getQueryParams("seminar_ids");

getPostParam($paramName)

別のページからPOSTで送信されてきた値を一つ取得します。

PHP
//パラメータを取得
$SPIRAL->getPostParam("seminar_id");

getPostParams($paramName)

別のページからPOSTで送信されてきた配列を取得します。

PHP
//パラメータを取得
$SPIRAL->getPostParams("seminar_ids");

フォームブロックのステップ取得

フォームのどのステップが表示されているかを取得します。

フォームブロックのステップ取得用PHPクラス

getRecordValue()

登録フォームまたは更新フォームの完了ステップにて、登録または更新した値を取得します。

PHP
$registForm = $SPIRAL->getRegistrationForm("登録フォーム識別名");
//完了ステップでのみ実行する
if ($registForm->isCompletedStep()) { 
$record = $SPIRAL->getRecordValue(); 
$recordId = $record['item']['_id']; 
$SPIRAL->setTHValue("newRecordId", $recordId); 
}

APIエラーを取得する方法

SPIRAL ver.2のAPIで発生したエラーをページに出力する方法は以下の通りです。

PHP
if(array_key_exists('status', $data)){//APIのエラーが発生した場合、APIのレスポンスにstatusが200以外で返ってくるので、statusをチェック
  if($data["status"] != 200){
    $SPIRAL->setTHValue("APIERROR", $data["message"]);//APIのエラーをThymeleafにセット
  }
}else{
  $docbody = $data["item"]["docbody"];//データを取得
  $SPIRAL->setTHValue("docbody", $docbody);//データをThymeleafにセット
}
body
<div th:if="${cp.result.isSuccess}">
    <p th:text="${cp.result.value['APIERROR']}"></p><!-- APIエラー文言を出力 -->
    <p th:text="${cp.result.value['docbody']}"></p>
</div>
<div th:if="${!cp.result.isSuccess}">
    <p th:text="${cp.result.errorMessage}">error message</p>
</div>

ThymeleafでPHP実行結果を呼び出す方法

基本フォーマット

ThymeleafでPHP実行結果を出力するには ${cp.result} を使用します。

<div th:if="${!cp.result.isSuccess}">
  <p th:text="${cp.result.errorMessage}">error message</p>
</div>

${cp.result}には、以下の情報が含まれます。

成功の場合
"result": {
"executionTime": "xxxms",
"isSuccess": true,
"value": {
   "amount":"100",
   "totalOrder": "60000"
 }
}
エラーの場合
"result": {
"executionTime": "xxxms",
"isSuccess": false,
"errorMessage": "xxxxx"
}

JavaScriptに値を渡す方法

SPIRAL ver.2では、Thymeleafのth:inlineを使用して、JavaScriptに値を渡すことができません。

JavaScriptにPHPの実行結果を渡す場合、ページ内のhiddenなどに出力した値をJavaScriptで取得して渡します。

boby
<input type="hidden" id="seminar" th:value="${cp.result.value['seminar']}">
<script>
  let seminar= document.querySelector("#seminar");
  alert(seminar.value);
</script>

制約事項

実行時間を制限

PHP実行開始から30秒以内に処理が完了しない場合、以下のエラーを返します。

server time out

PHPの一部機能を制限

一部の関数、PHPクラス、およびパラメータについて、使用を制限しています。

制限している関数等については以下のリンク先をご参照ください。

PHP7.4で使用できない関数・PHPクラス・パラメータ一覧

PHP8.1で使用できない関数・PHPクラス・パラメータ一覧

制限している関数等を使用された場合、エラーを返します。

例)file_get_contents()

PHP7.4

file_get_contents() has been disabled for security reasons on line xx

PHP8.1

Call to undefined function file_get_contents() on line xx

ページのプレビューでの実行制限

ページのプレビュー画面では、PHPは動作しません。

サンプルプログラム

PHPを使用したサンプルプログラムをご案内します。

外部決済システムとの連携

残席状況表示

DBに登録されているデータをページに表示