フォームヘルパで作成したチェックボックスの配列について

2020年12月1日 at 17:30

フォーラムの皆さま

 平素は大変お世話になっております。
いつも暖かいご支援を賜りまして、心より感謝申し上げます。

外部フォームを開発するにあたり、フォームヘルパを用いて
チェックボックスを配置いたしました。
外部フォーム(フォーム名:shukai)において、「回答内容確認」
ボタンをクリックした際、回答内容の確認画面を表示させるように
いたしました。その際は、チェックボックスをクリックしたとき
の値が配列で取得できております。
この、回答確認画面には、「回答を登録する」と「元の画面に戻る」
ボタンが配置されており、「元の画面に戻る」をクリックすると、
最初に表示されていた外部フォームに戻り、すでに回答した箇所に
チェックを入れた状態にしたいと思っております。

テキストボックスやラジオボタンに関しては、
ビュー側に
$form->hidden('××'); ※××は、フォームヘルパで配置したテキストボックス
などの$nameです。
コントローラ側は、
$section = 'edit';
$this->set('section', $section);
$this->set('isvalid', true);

とするだけで、画面を戻った際に、元の回答が表示もちくはチェックされて
おりますが、チェックボックスだけは、戻ると空白になります。
フォームヘルパで配置した、チェックボックスを、選択した状態で元に
戻すことは可能なのでしょうか?

拙い説明で大変申し訳ございません。
どうぞよろしくお願い申し上げます。

# concrete5 Version
Core Version - 8.5.4
Version Installed - 8.5.4
Database Version - 20200609145307

# Database Information
Version: 5.1.73
SQL Mode:

# concrete5 Packages
CSV User Import & Export (0.1.1), Honest Websites Back To Top (1.1.0), Login/Logout Link (1.0), Login Page Background (0.9.1), Manual Nav (2.3.3), Migration Tool (0.9.1)

# concrete5 Overrides
blocks/external_form/form/controller/tkp_menu.php, blocks/external_form/form/controller/enq_a.php, blocks/external_form/form/controller/enq_b.php, blocks/external_form/form/controller/enq_c.php, blocks/external_form/form/controller/shukai.php, blocks/external_form/form/controller, blocks/external_form/form/tkp_menu.php, blocks/external_form/form/enq_a.php, blocks/external_form/form/enq_b.php, blocks/external_form/form/enq_c.php, blocks/external_form/form/shukai.php, blocks/external_form/form, blocks/external_form, mail/mail_send_hyoka_a.php, mail/mail_send_hyoka_b.php

# concrete5 Cache Settings
Block Cache - Off
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: フォームヘルパで作成したチェックボックスの配列について

2020年12月2日 at 13:19
取り急ぎ、応急処置を行いまして、元の画面に戻った際に
選択状態を再現するようにいたしましたので、ご報告
申し上げます。

チェックボックスのみ、フォームヘルパの$name 属性を配列にせず、
それぞれ独立した名前とし、そこから送信されたPOSTデータを
コントローラ側で取得し、$input変数に配列として代入しなおして
戻しました。
結果、元の画面に戻った際、クリックしたチェックボックスに
チェックを入れることができました。

引き続き、対処方法を調べてまいります。
取り急ぎ、ご連絡申し上げます。
 

Re: フォームヘルパで作成したチェックボックスの配列について

2020年12月4日 at 9:35
本件、昨日の週刊 concrete5 にて取り上げました。
解決方法はあるのですが、
concrete5 独自の属性の保存の仕方とそれの読み込み方を理解すれば…
といった感じで簡易的なサンプルコードを提示して解説しています。
下記動画の08:50あたりから確認してみてください。
https://www.youtube.com/watch?v=xs7PLgSHAKM
 

Re: Re: フォームヘルパで作成したチェックボックスの配列について

2020年12月7日 at 7:59
aniya様

おはようございます。
いつも、ご教示を賜り、本当にありがとうございます。
ご紹介いただいた動画を拝聴させていただきました。
Arrayの連想配列に値とキーをセットする発想はございません
でした(;^_^A
動画を拝見して、大変勉強になりました。
ありがとうございました!!
aniyaさま、いつも本当にありがとうございます!!