2016-06-25 6 views
0

Moodleの3のリダイレクトURLは、ブロックIは、次のエラーを取得していますエラー:フォームのMoodle

を開発する際に必要なパラメータ(ID)が行方不明になった:「必須パラメータ(ID)が行方不明になりました」。

リダイレクト($ url)の 'Else if'ステートメントで配列( 'id' => $ instance-> id)を使用している場合にのみ、$ mformで発生します。

驚いたことに、リダイレクトURLを持つボタンで同じコードを使用していると、コードが正しく機能するためです。

私はいくつかのことを試しましたが、何も役立たないです。何が問題なの?ここで

はいくつかのコードです:あなたは、フォームではなく、リダイレクトを送信すると

$id = required_param('id', PARAM_INT); 

$instance = $DB->get_record('block_instances', array('id' => $id), '*', MUST_EXIST); 

$context  = \context_block::instance($instance->id); 

$mform = new newlink(); 

if ($mform->is_cancelled()) { 

    $url = new moodle_url('/my'); 

    redirect($url); 

} else if ($fromform = $mform->get_data()) { 

// data from form 

.... 

$url = new moodle_url('/blocks/name_of_block/links.php', array('id' => $instance->id)); // HERE IS THE PROBLEM 

    (Note: when I'm using here the block instance id number 123 directly, the redirect is working correct: 

    $url = new moodle_url('/blocks/name_of_block/links.php?id=123';) 

    redirect ($url); 

} else { 

//Set default data (if any) 

$mform->set_data($toform); 

//displays the form 

$mform->display(); 

} 

$url = new moodle_url('/blocks/name_of_block/links.php', array('id' => $instance->id)) 

echo $OUTPUT->single_button($url, get_string('button:links', 'block_name_of_block')); // THIS IS WORKING CORRECT 

答えて

0

はそれですか?フォームで

あなたが持っているん:

$mform->addElement('hidden', 'id'); 
$mform->setType('id', PARAM_INT); 

と上記のコードでは、あなたが持っているん:

$toform->id = $id; 
$mform->set_data($toform); 
+0

をそれは、リダイレクトにより提出の上、むしろそうです。しかし、URLをチェックするとき、ブロックインスタンスIDはURLに追加されません。 – Franky

+0

リダイレクトよりも送信したようです。しかし、URLをチェックすると、ブロックインスタンスIDはURLに追加されません。私は自分のコードをチュートリアル([link](https://docs.moodle.org/dev/lib/tablelib.php))に基づいています。テーブルから行を削除します。これは、URLにインスタンスIDを追加した後に機能しています。しかし、私が何をしても、テーブルに新しいレコードを追加することは、リダイレクトURLにハードコードされたインスタンスIDを置く場合にのみ可能です。 Btw、MoodleチュートリアルではブロックインスタンスIDは使用されていません。私のコードでは、隠された$ mform要素はありません。私はそれをテストしましたが、問題はまだ残っています。 – Franky

+0

'required_pa​​ram()'ではなく 'optional_param()'を使用してください。 –

関連する問題