SilverStripe表单重定向错误
如果我单击submit按钮将数据从我的SilverStripe表单重定向错误,silverstripe,Silverstripe,如果我单击submit按钮将数据从我的SilverStripe表单发送到数据库(xampp,mysql),它不会将我重定向回表单页面。相反,它重定向到{BaseUrl}name\u of_controller/name\u of_form->在我的例子中:localhost/pmtool/DeveloperController/NewTaskMask。我花了几个小时寻找这个问题的解决办法,但没有成功 下面是文件的代码,其中定义了表单和操作。 在另一个html文件中,表单将通过$NewTaskMa
SilverStripe
表单发送到数据库(xampp,mysql
),它不会将我重定向回表单页面。相反,它重定向到{BaseUrl}name\u of_controller/name\u of_form
->在我的例子中:localhost/pmtool/DeveloperController/NewTaskMask
。我花了几个小时寻找这个问题的解决办法,但没有成功
下面是文件的代码,其中定义了表单和操作。
在另一个html文件中,表单将通过$NewTaskMask
调用。通过URLlocalhost/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();
}
}
似乎是路由问题。我假设您已经设置了
developer
路径来点击dvelopecontroller
。做同样的事,我可以重现你的错误
我尝试显式地为DeveloperController
添加另一条路径以点击DeveloperController
控制器,因为它没有正确重定向。这是一个相当奇怪和神奇的修复,老实说,我不知道为什么它会起作用,但它解决了它:
---
名称:mysiteroutes
之后:框架/路线#核心路线
---
主任:
规则:
'developer/$Action/$ID/$Name':'DeveloperController'
“DeveloperController/$Action/$ID/$Name”:“DeveloperController”
更新路由以符合您的设置,并且不要忘记在之后运行?flush
也许有更深入的人可以解释发生了什么。我想用一个模板呈现“localhost/pmtool/developer/$ID”页面。
所以我添加了“$ID!”=>”将“索引到url\u处理程序。但现在的问题和开始时一样。我是否必须为此问题添加另一条路由,或者是否有行“$ID!”=>”索引“一个bug
private static $url_handlers = array(
'newtask' => 'renderNewTaskForm',
'$ID!' => 'index'
);
public function index(SS_HTTPRequest $request) {
return $this->renderWith('DeveloperTemplate');
}
谢谢你的回答,但是:它现在重定向回来,好的,但是表单的动作(“doCreateT”)不会被调用。当你放一些回音(“你好”)时,你可以检查这个;动作中的命令。还没有创建数据库条目,因为无法访问操作的问题,这很奇怪。它对我跑步有效,现在有效了!你的解决方案是正确的。非常感谢你!但是我还有一个问题,请看下一个答案您已经定义了不能与
developer//$Action/$ID/$Name//code>共存的路由developer//$ID代码>。但是,默认情况下,所有请求都会命中索引任务,因此您应该能够省略“$ID!$=>”索引'
,然后在索引函数中,您可以通过执行$request->param('ID')
获取参数。我直到现在还没有看到您的答案。这个问题已经解决了。创建了处理新路由“localhost/pmtool/developer/projects/$ID”的新控制器。现在,索引函数将由新控制器处理。但是谢谢你的回答!我认为你的解决方案会更快更好:D