Если я нажму кнопку «Отправить», чтобы отправить данные из моей формы SilverStripe
в базу данных (xampp, mysql
), она не перенаправит меня обратно на страницу формы. Вместо этого он перенаправляет на {BaseUrl}name_of_controller/name_of_form
-> в моем случае: localhost/pmtool/DeveloperController/NewTaskMask
. Я искал часы для решения этой проблемы, но без каких-либо успехов.Ошибка перенаправления формы SilverStripe
Вот код файла, в котором эта форма и действие определено. В другом html-файле форма будет вызвана через $NewTaskMask
. По URL localhost/pmtool/developer/newtask
будет вызываться функция renderNewTaskForm
, будет создан шаблон с $NewTaskMask
.
Все поля, такие как Название, Описание и т. Д., Существуют в базе данных.
class DeveloperController extends ContentController {
private static $allowed_actions = array('NewTaskMask','renderNewTaskForm');
private static $url_handlers = array(
'newtask' => 'renderNewTaskForm'
);
public function renderNewTaskForm(SS_HTTPRequest $request) {
return $this->renderWith('NewTaskForm');
}
public function NewTaskMask() {
$fields = new FieldList(
TextField::create('Title','Title')
->setAttribute('autocomplete', 'off')
->setAttribute('placeholder', 'Enter a task title ...'),
TextareaField::create('Description','Description')
->setAttribute('autocomplete', 'off'),
DropdownField::create('Project','Project', Project::get()->map('ID','Title')),
DropdownField::create('Developer','Developer', Developer::get()->map('ID','Title'))
);
$actions = new FieldList(FormAction::create('doCreateT','Task anlegen'));
$requiredFields = new RequiredFields(array('Title'));
return new Form($this, 'NewTaskMask', $fields, $actions, $requiredFields);
}
public function doCreateT($data, $form) {
// Creating a new task record
$nT = new Task();
$nT->Title = $data['Title'];
$nT->Description = $data['Description'];
$nT->Project = $data['ProjectID'];
$nT->Developer = $data['DeveloperID'];
$nT->write();
// Create a nice msg for our users
$form->sessionMessage('Task angelegt!','good');
// Redirect back to the form page
return $this->redirectBack();
}
}
ТНХ Janne для ответа, но: перенаправляет теперь назад, хорошо хорошо, но действие вида («doCreateT») не будет называться. Вы можете проверить это, когда вы добавили эхо («привет»); команд в действии. Также запись базы данных не была создана из-за проблемы, что действие не будет достигнуто. – crappidy
Хм, это странно. Он работает для меня, запуская [этот код] (https://gist.github.com/janneklouman/80840d1c142087325d1f1e5476814482). –
теперь он работает! ваше решение правильно. Большое спасибо! Но у меня есть еще одна проблема, см. Следующий ответ. – crappidy