Moodle フォームは送信後に検証できません
P粉287726308
2023-08-28 21:01:24
<p>構造が URL のパラメータに依存するフォームを作成しようとしています。 URL にパラメータが指定されていない場合は、エラー メッセージが表示されます。 ID に基づいてデータベース クエリを実行し、フォーム データを入力します。 </p>
<p>URL の例: http://127.0.0.1/local/group/signin.php?groupid=14</p>
<p>残念ながら、アクション ボタンをクリックしてフォームを送信すると、フォームが検証されません。 http://127.0.0.1/local/group/signin.php にジャンプし、URL にパラメータがないため、「グループが見つかりません」というエラー メッセージが表示されます。 </p>
<p>ここで私の何が間違っているのでしょうか? </p>
<p>signinform.php:</p>
<pre class="brush:php;toolbar:false;">class Signinform extends Moedleform {
パブリック関数定義() {
グローバル $DB;
グローバル $USER;
$mform = $this->_form;
$urlid = $this->_customdata['id']; // 渡されたグループIDを取得する
$message = 'グループが見つかりません';
if(is_null($urlid)){
$mform->addElement('html', '<h3>'.\core\notification::error($message).'</h3>');
}
それ以外{
// フォームの構築、SQL クエリの実行など。
$this->add_action_buttons(true, '送信');
}
}
関数の検証($data, $files) {
戻り配列();
}
}</pre>
<p>Login.php:</p>
<pre class="brush:php;toolbar:false;">$PAGE->set_url(new modle_url('/local/schedule/signin.php?'));
$PAGE->set_context(\context_system::instance());
$PAGE->set_pagelayout('base');
$PAGE->set_title("登録");
$PAGE->set_Heading("グループを登録");
グローバル $DB;
グローバル $USER;
$urlid = $_GET["id"];
$to_form = array('id' => $urlid); // グループIDをフォームに渡します
$mform = 新しいサインインフォーム(null, $to_form);
$homeurl = 新しいmoodle_url('/');
if ($mform->is_cancelled()) {
redirect($homeurl, 'Cancelled.'); // テスト目的のみなので、ここには入力しないでください
else if ($fromform = $mform->get_data()) {
redirect($homeurl, '検証中'); // テスト目的のみなので、ここには入力しないでください
}
echo $OUTPUT->header();
$mform->display();
echo $OUTPUT->footer();</pre></p>
ページに渡す必要がある「ID」を含む隠しフィールドをフォームに追加する必要があります。追加しないと、フォームが送信されたときに ID がページのパラメーターに存在しなくなります。
例 (definition() 内)
リーリーさらに、Moodle では $_GET に直接アクセスしないでください。ラッパー関数 required_param() またはOptional_param() を使用してください。理由は次のとおりです。
リーリー