Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SilverStripe表单重定向错误_Silverstripe - Fatal编程技术网

SilverStripe表单重定向错误

SilverStripe表单重定向错误,silverstripe,Silverstripe,如果我单击submit按钮将数据从我的SilverStripe表单发送到数据库(xampp,mysql),它不会将我重定向回表单页面。相反,它重定向到{BaseUrl}name\u of_controller/name\u of_form->在我的例子中:localhost/pmtool/DeveloperController/NewTaskMask。我花了几个小时寻找这个问题的解决办法,但没有成功 下面是文件的代码,其中定义了表单和操作。 在另一个html文件中,表单将通过$NewTaskMa

如果我单击submit按钮将数据从我的
SilverStripe
表单发送到数据库(
xampp,mysql
),它不会将我重定向回表单页面。相反,它重定向到
{BaseUrl}name\u of_controller/name\u of_form
->在我的例子中:
localhost/pmtool/DeveloperController/NewTaskMask
。我花了几个小时寻找这个问题的解决办法,但没有成功

下面是文件的代码,其中定义了表单和操作。 在另一个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();
    }
}

似乎是路由问题。我假设您已经设置了
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