SilverStripe表单重定向错误

时间:2016-07-26 03:30:48

标签: silverstripe

如果单击“提交”按钮将数据从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();
    }
}

2 个答案:

答案 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');
}