如果单击“提交”按钮将数据从SilverStripe
表单发送到数据库(xampp, mysql
),则不会将我重定向回表单页面。而是重定向到{BaseUrl}name_of_controller/name_of_form
- >就我而言:localhost/pmtool/DeveloperController/NewTaskMask
。我已经搜索了几个小时来解决这个问题,但没有任何成功。
这是文件的代码,其中定义了表单和操作。
在另一个html文件中,表单将通过$NewTaskMask
调用。通过网址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();
}
}
答案 0 :(得分:1)
似乎是路由问题。我假设您已设置developer
路线以点击DveloperController
。做同样的事我可以重现你的错误。
我尝试明确添加DeveloperController
的其他路由来点击DeveloperController
控制器,因为它没有正确重定向。这是一个非常奇怪和神奇的修复,说实话,我不确定它为什么会起作用,但它解决了它:
---
Name: mysiteroutes
After: framework/routes#coreroutes
---
Director:
rules:
'developer//$Action/$ID/$Name': 'DeveloperController'
'DeveloperController//$Action/$ID/$Name': 'DeveloperController'
更新路线以符合您的设置,之后不要忘记运行?flush
。
也许有更多洞察力的人可以解释发生了什么。
答案 1 :(得分:0)
我想渲染页面" localhost / pmtool / developer / $ ID"用模板。 所以我添加了' $ ID!' => '索引' 到url_handlers。但现在它与开始时的问题相同。我是否必须为此问题添加其他路线,或者使用' $ ID!' => '索引' 一个错误?
private static $url_handlers = array(
'newtask' => 'renderNewTaskForm',
'$ID!' => 'index'
);
public function index(SS_HTTPRequest $request) {
return $this->renderWith('DeveloperTemplate');
}