Expressのテーブルデータ取得について

2020年6月17日 at 16:29

いつも大変お世話になっております。
外部フォームでログイン用ブロックを作成し、Expressに追加した
エンティティに保存されているユーザデータと照合してログインを
許可したいと考えております。

ユーザ用エンティティはエクスプレスから新規で作成いたしました。
外部フォームの「ログイン」ボタンをクリックした際、データベース
へ接続するときは、
例えば、Expressエンティティ名を「user_login」としますと、

public static function getUser($id)
{
$db = \Database::connection();
$userinfo = $db->fetchColumn('SELECT foo FROM user_login WHERE id = ?', [$id]);
return $userinfo;
}

 で、ユーザIDが一致するデータ配列を取得できるものでしょうか?
コントローラとして作成したphpファイルで、上記クエリを実行してみましたが、
データが取得できていないようです。
ご教示頂けますと幸いです。
宜しくお願いいたします。


# concrete5 Version
Core Version - 8.5.2
Version Installed - 8.5.2
Database Version - 20190925072210

# Database Information
Version: 5.1.73
SQL Mode:

# concrete5 Packages
Cycle2 Slide Show (1.0.2), Honest Websites Back To Top (1.1.0), Lazy Menu (1.1), Manual Nav (2.2.0), Random Image (2.0.0), Ronyd Expanded Search Bar (2.0)

# concrete5 Overrides
blocks/autonav/templates/mainnav/view.php, blocks/autonav/templates/mainnav/css/flexnav.css, blocks/autonav/templates/mainnav/css/font-awesome.css, blocks/autonav/templates/mainnav/css/page.css, blocks/autonav/templates/mainnav/css, blocks/autonav/templates/mainnav/font/fontawesome-webfont.eot, blocks/autonav/templates/mainnav/font/fontawesome-webfont.svg, blocks/autonav/templates/mainnav/font/fontawesome-webfont.ttf, blocks/autonav/templates/mainnav/font/fontawesome-webfont.woff, blocks/autonav/templates/mainnav/font/FontAwesome.otf, blocks/autonav/templates/mainnav/font, blocks/autonav/templates/mainnav, blocks/autonav/templates, blocks/autonav, blocks/external_form/form/controller/test_form.php, blocks/external_form/form/controller, blocks/external_form/form/test_form.php, blocks/external_form/form/login.php, blocks/external_form/form/ex_form.php, blocks/external_form/form, blocks/external_form, js/app.js, js/jquery-form.js, mail/mail_send.php

# concrete5 Cache Settings
Block Cache - On
Overrides Cache - On
Full Page Caching - Off
Full Page Cache Lifetime - Every 6 hours (default setting).

# Server Software
Apache

# Server API
apache2handler

# PHP Version
7.1.33

# PHP Extensions
apache2handler, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, imap, intl, json, ldap, libxml, mbstring, mcrypt, mysqli, mysqlnd, odbc, openssl, pcre, PDO, pdo_mysql, PDO_ODBC, pdo_pgsql, pdo_sqlite, pgsql, Phar, posix, pspell, recode, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, sqlite3, standard, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, wddx, xml, xmlreader, xmlrpc, xmlwriter, xsl, Zend OPcache, zip, zlib

# PHP Settings
max_execution_time - 3600
log_errors_max_len - 4096
max_file_uploads - 100
max_input_nesting_level - 64
max_input_time - 60
max_input_vars - 1000
memory_limit - 64M
post_max_size - 384M
sql.safe_mode - Off
upload_max_filesize - 256M
ldap.max_links - Unlimited
mysqli.max_links - Unlimited
mysqli.max_persistent - Unlimited
odbc.max_links - Unlimited
odbc.max_persistent - Unlimited
pcre.backtrack_limit - 1000000
pcre.recursion_limit - 100000
pgsql.max_links - Unlimited
pgsql.max_persistent - Unlimited
session.cache_limiter - no value
session.gc_maxlifetime - 7200
soap.wsdl_cache_limit - 5
opcache.max_accelerated_files - 4000
opcache.max_file_size - 0
opcache.max_wasted_percentage - 5

タグ:

Re: Expressのテーブルデータ取得について

2020年6月17日 at 17:32
SQLクエリで簡単に取れるような構造になっていないため、 Concrete\Core\Express\EntryList クラスを使って絞り込む必要があります。

参考http://documentation.concrete5.org/developers/express/creating-reading-searching-updating-and-deleting-express-entries
 

Re: Expressのテーブルデータ取得について

2020年6月18日 at 10:28
菱川さま

ご教示ありがとうございます。
ドキュメントを読んで、実装いたします。
ありがとうございました。
 

Re: Re: Expressのテーブルデータ取得について

2020年6月18日 at 10:43
菱川さま
 そう致しますと、例えば、エクスプレスのエンティティを使わず、
concrete5のMySQLにカスタムビジネスデータベースを追加して、
そのデータベースへ\Database::connection() の関数を用いて接続する
方法ですと、可能ということになりますでしょうか?
 

Re: Expressのテーブルデータ取得について

2020年7月6日 at 16:16
いつもお世話になっております。
先日ご教示頂いた情報をもとに、外部フォームのview と controllerを作成し、
サーバにファイルを送信してみました。
フォームは簡単な構造で、ユーザID、名前、メールアドレス、都道府県と
要望を記入して、Expressデータベースへ登録するものです。
view(express_view.png)と controller(express_controller.png)を添付いたしました。
また、Express側にエンティティを作成し(エンティティ名:user 複数名 users)
ユーザID(ハンドル名:userid)、お名前(ハンドル名:username)、メールアドレス(ハンドル名:
mailaddress)、都道府県(ハンドル名:pref)及び要望(ハンドル名:youbou )をそれぞれ
設定しました。

外部フォームで適当なレコードを入力し、「登録」ボタンを押下しましたところ、
404 page not foundと表示されました。
コード(view_code.txt および controller_code.txt)を添付しております。
コントローラ側のコードに原因があるかと思いますが、どこが原因でエラーが表示
されるか不明でございますので、ご教示頂けませんでしょうか?
どうぞよろしくお願いいたします。
 

Re: Expressのテーブルデータ取得について

2020年7月7日 at 9:54
ひとつの検証方法として、Expressに作成したエンティティに、
フォームを設定し、ブロックからコンテナエリアへフォーム「user」を
設置いたしました。
このフォームから入力したデータは、Expressエンティティ(エンティティ名:users)
に確実に登録されております。
この、フォームからExpressエンティティへ登録される動作を定義しているコード
を確認したいと思っております。
FTPで、/concrete/blocks/express_form 配下のphpファイルを参照しましたが、
どれがフォームから登録されるコードが記載されているか不明です。
Expressで作成したフォームから、データを登録する過程を記述したコードの場所を
ご教示頂ければ幸いです。どうぞよろしくお願いいたします。
 

Re: Expressのテーブルデータ取得について

2020年7月7日 at 11:04
何度も申し訳ございません。
controller側の関数引数にある、$bIDという変数は
そもそも何のIDに該当するのでしょうか?
実は、外部フォームを作成なさっておられる方のコード
を参照して、今回controllerを作成しましたが、この変数
の処遇が不明なため、くっつけた状態にしておりますが、
そもそも何を意味するのか、理解ができておりません。
外部フォームからpostされた際のフォームID付与のため
とかいろいろ考えております。
お恥ずかしい限りでございますが、ご教示頂けません
でしょうか。
どうぞよろしくお願いいたします。
 

Re: Expressのテーブルデータ取得について

2020年7月13日 at 9:52
おはようございます。たびたび申し訳ございません。
現在、フォームヘルパーを用いた外部フォームを
作成し、そこにはユーザID、ユーザ名、メールアドレス、
居住都道府県と自由記述欄(テキストエリア)を設置し、
submitボタンを配置しております。
外部フォームは、ブロックとして正常に画面上に表示
することができました。
controller側で、バリデーションヘルパーを用いたエラー
チェック後、Expressデータベースへ接続しようとして
おります。
http://documentation.concrete5.org/developers/express/creating-reading-searching-updating-and-deleting-express-entries
を参照して、Expressへデータ登録を行なおうとしておりますが、
現在作成したExpressエンティティが、「user」であるとしますと、

2/8ページ冒頭にございます、
$address = new \Concrete\Core\Entity\Attribute\Value\Value\AddressValue();
の個所については、どのように定義するべきなのでしょうか?
ここで行き詰っております。
どうぞよろしくお願い致します。
 

Re: Expressのテーブルデータ取得について

2020年7月16日 at 10:11
一点ずつ返答しますね。

>  そう致しますと、例えば、エクスプレスのエンティティを使わず、
> concrete5のMySQLにカスタムビジネスデータベースを追加して、
> そのデータベースへ\Database::connection() の関数を用いて接続する
> 方法ですと、可能ということになりますでしょうか?

いえ、\Database::connection() は使わず、エクスプレスのエンティティを使った方が良いと思います。

> 先日ご教示頂いた情報をもとに、外部フォームのview と controllerを作成し、
> サーバにファイルを送信してみました。
(省略)
> 外部フォームで適当なレコードを入力し、「登録」ボタンを押下しましたところ、
> 404 page not foundと表示されました。
> コントローラ側のコードに原因があるかと思いますが、どこが原因でエラーが表示
> されるか不明でございますので、ご教示頂けませんでしょうか?

ちょっとだけ見ただけなのですが、controller.txt を見ましたが、外部フォームで必要になりそうな、view() がないようです。他にも細かい部分で修正が必要そうです。

これは Express との連携というより、外部フォームの作り方で足らないところがあるようなので、一度、僕のサンプルコードを参考に、足らない部分を修正してみてはいかがでしょうか?
http://github.com/katzueno/c5_external_form_boilerplate

ざっくりですが
application/blocks/external_form/form/confirm_form.php
application/blocks/external_form/form/controller/confirm_form.php
を参考に、修正してみてください。

> FTPで、/concrete/blocks/express_form 配下のphpファイルを参照しましたが、
> どれがフォームから登録されるコードが記載されているか不明です。
> Expressで作成したフォームから、データを登録する過程を記述したコードの場所を

データを保存する過程は単純に /concrete/blocks/express_form 配下だけの記述ではないです。

concrete/blocks/express_form/controller.php の5行目から、use 宣言がされています。
これらの use 宣言が Express Form が使用している concrete5 Core ファイルの場所を示しています。

例えば
use Concrete\Core\Express\Attribute\AttributeKeyHandleGenerator;
であれば
concrete/src/Express/Attribute/AttributeKeyHandleGenerator.php
のファイルとその中の Class を参照しています。

35ファイルぐらいとなります。

Express Form は、一般ユーザー側にとってシンプルなステップでフォームを作成できるようにしているので、その操作性を作り出すため複雑なプログラムになっています。

> controller側の関数引数にある、$bIDという変数は
> そもそも何のIDに該当するのでしょうか?

block ID です。
これは、concrete5 全般で、ブロックを管理するための ID です。

外部フォームブロックのみならず、記事ブロックなどでも使われています。

> 2/8ページ冒頭にございます、
> $address = new \Concrete\Core\Entity\Attribute\Value\Value\AddressValue();
> の個所については、どのように定義するべきなのでしょうか?

これは、Express の項目の種類が「住所」であった場合、住所オブジェクトに必要な各プロパティ(郵便番号、都道府県、市町村等)を設定して、オブジェクトとして返す方法です。

住所属性の設定方法が必要ということでしょうか?


それでは、よろしくおねがいします。
 

Re: Expressのテーブルデータ取得について

2020年7月16日 at 11:01
カツさん

 ご返信まことにありがとうございます。
お教えいただいたサンプルコードを参考に、まずはどのように動作するか
確認してみます。
まだまだ知識が不足しているということだと思います。
もう少しドキュメントや、カツさんのコードを学習して、確実な動作ができる
ようになります。