Re: 外部フォームからExpressエントリを登録したい

2020年7月21日 at 16:20

いつもありがとうございます。
昨日より、phpの構成等を一から見直しました。
まずは、当フォーラムの過去記事を参照して、Expressエンティティ(エンティティ名:user)
からデータを取得できるか、Viewに設置したphpファイル(ファイル名:GetExpressData.php)に
<?php
$entry = Express::getObjectByHandle('user');
$list = new Concrete\Core\Express\EntryList($entry);
$results = $list->getResults();
if (count($results) > 0){
foreach($results as $exEntry){
$userid = $exEntry->getUserid();
$username = $exEntry->getName();
$email = $exEntry->getEmail();
$pref = $exEntry->getUserpref();
$shousai = $exEntry->getShousai();
?>
<div class="col-sm-4">
<?=$userid;?>
</div>
<br>
<div class="col-sm-4">
<?=$username;?>
</div>
<br>
<div class="col-sm-4">
<?=$email;?>
</div>
<br>
<div class="col-sm-4">
<?=$pref;?>
</div>
<br>
<?php
}
}
?>
としましたところ、外部ブロックがロードされた際にエンティティuserからデータを
取得して表示することができました。
昨日は、データをExpressが取得する上のコードをコントローラ側に記述して、
"Page Not Found"と表示されておりました。

今度は、コントローラ側のファイル(ファイル名:GetExpressData.php)に、テスト
用の外部フォームを参考にして、外部フォームのブロックIDを取得した際に、
レスポンスを返すコートを記述して、サーバに設置しました。

<?php
namespace Application\Block\ExternalForm\Form\Controller;
use Concrete\Core\Controller\AbstractController;
use Core;
use UserInfo;

class exGet extends AbstractController{

public function action_express_get($bID = false)
{
if ($this->bID == $bID){
$this->set('response', t('Thanks!'));
return true;
}
}

public function view(){
$this->set('message', t('This is test!'));
}
}
?>

テスト用外部フォームでは、view側でアクションが行われていない時(つまりロード
されたとき)は、$message の内容がフォームに表示されておりますが、どういうわけ
か、何も表示されておりません。
次に、レスポンスがあれば、view側のフォームに

if (isset($response)){
var_dump($response);
?>
<div id="ok">
<h3>応答あり</h3>
</div>
と記述いたしましたが、コントローラ側を呼び出そうとすると、"error404 Page not found"
と表示されてしまいます。
過去のフォーラム記事で、namespace に起因している記事がありましたので、名前空間を
見直してみましたが、問題ないようです。
なんとか、コントローラ側のファイルから応答を取りたいのですが、404エラーが発生
する原因が分かりかねております。
どなた様か、この対処方法についてご教示頂けませんでしょうか?
どうぞよろしくお願い致します。

http://demo.survey-support.jp/test/index.php

で、実際にExpressから取得したデータも表示されております。

タグ:

Re: 外部フォームからExpressエントリを登録したい

2020年7月22日 at 13:50
いつもありがとうございます。
すみません、自己解決しました。

http://www.cherrypieweb.com/1110

を再度読み返し、私の間違いに気づきました。
結果、ファイル名とクラス名を変更しました。

【修正前】
ファイル名:GetExpressData.php
クラス名:exGet

【修正後】
ファイル名:get_express_data
クラス名:GetExpressData

concrete5 におけるファイルやクラス名命名規則の最も基本的な
ところでございました。
大変失礼いたしました。
お陰様で、コントローラからレスポンスを受信することができました。
これから、Expressへのデータ登録へ進んでまいります。
ありがとうございました。