2016-06-25 15 views
0

Moodle 3, einen BlockFehler: Ein erforderlicher Parameter (id) fehlt, wenn Umleitungs-URL in Form Moodle

Entwicklung ich die folgende Fehlermeldung erhalten: 'Ein erforderlicher Parameter (id) fehlte.'

Es geschieht in $ mform, nur wenn ich das Array ('ID' => $ instance-> id) in der Anweisung 'Else if' in der Umleitung ($ url) verwendet.

Überraschenderweise, weil, wenn ich den gleichen Code in einer Schaltfläche mit einer Weiterleitungs-URL verwenden, der Code korrekt funktioniert.

Ich habe mehrere Dinge ausprobiert, aber nichts hilft. Was könnte das Problem sein? Hier

ist ein Code:

$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 

Antwort

0

Ist es, wenn Sie das Formular statt der Weiterleitung einreichen?

In Ihrem Formular haben Sie:

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

und in dem obigen Code tun Sie haben:

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

Es scheint eher auf die Einreichung als auf Umleitung. Beim Überprüfen der URL wird die Blockinstanz-ID jedoch nicht zur URL hinzugefügt. – Franky

+0

Es scheint eher beim Einreichen als bei Weiterleitung. Beim Überprüfen der URL wird die Blockinstanz-ID jedoch nicht zur URL hinzugefügt. Ich habe meinen Code auf einem Tutorial ([link] (https://docs.moodle.org/dev/lib/tablelib.php)) basiert und Code hinzugefügt, z. um Zeilen aus der Tabelle zu löschen. Dies funktioniert, nachdem ich die Instanz-ID in der URL hinzugefügt habe. Aber was auch immer ich mache, ist das Hinzufügen eines neuen Datensatzes in der Tabelle nur möglich, wenn ich die Instanz-ID in die Umleitungs-URL festcodiert habe. Übrigens, im Moodle-Tutorial wird keine blockinstance-ID verwendet. In meinem Code habe ich kein verstecktes $ mform-Element, das habe ich getestet, aber das Problem bleibt bestehen. – Franky

+0

Sie sollten wahrscheinlich 'optional_param()' anstelle von 'required_param()' –