Ich habe eine benutzerdefinierte Route:
/create//$Action/$ID
Mit einer Aktion:
public function Edit(SS_HTTPRequest $request) {
$id = $this->getRequest()->params()['ID'];
if($this->request->isPost()) return UploadForm::create($this, 'Edit/' . $id, 'SubmitImportedModule');;
return $this->renderWith(array("Edit", "Page"));
}
und eine eigene Form:
class UploadForm extends Form {
public function __construct($controller, $name, $action) {
$fields = FieldList::create(
TextField::create('Title', 'Title'),
$course = UploadField::create('Upload', 'Upload')
);
$actions = FieldList::create(
FormAction::create($action, 'Add Resource')
);
$validator = RequiredFields::create('Name');
parent::__construct($controller, $name, $fields, $actions, $validator);
}
}
Wenn der Pfad/create/Edit/das Upload-Feld funktioniert gut. Wenn der Pfad jedoch/create/Edit/1/lautet, antwortet der Server mit:
Die Aktion '1' ist in der Klasse UploadImportedCourseForm nicht verfügbar.
Eintauchen in die handleRequest
in RequestHandler
habe ich festgestellt das zweimal aufgerufen wird, wird jedes Mal 180 Zeile, wo es am Objekt sieht latestParam()
. Das erste Mal, dass es die Aktion heißt, ist Edit, zu erwarten, aber beim zweiten Mal ist es 1, das ist eigentlich die ID.
Wie hat sich die Aktion in derselben Anfrage geändert und wie gehe ich vor, um mein Problem zu beheben? Die einzige Möglichkeit, wie ich dieses Problem umgehen kann, ist ein verstecktes Feld mit der ID.
Sie haben 2 Handler mit dem gleichen Namen: Anforderungshandler (registriert mit benutzerdefinierten Route) und Form Action Handler (registriert von Formularobjekt) –
Ich würde ein verstecktes Feld verwenden, wie Sie erwähnt haben. Das habe ich in der Vergangenheit an Projekten gemacht. –
@GregSmirnov Also der Formularaktionshandler ist derjenige, der bricht? Wenn ich url_handlers in dieser Klasse mit der gleichen von meiner benutzerdefinierten Route überschreiben, glaubst du, dass das funktioniert? – Rudiger