CakePHP 3无模式持久性

时间:2018-05-14 20:23:46

标签: php cakephp cakephp-3.x

我正在根据给定here的示例创建一个无模式表单。一旦用户单击提交按钮,我将从数据库中检索一些信息并将其显示在表单下方的表格中。当我点击提交按钮时,表单会每次显示startend的默认值,这会导致使用该页面的用户产生一些混淆。

有没有办法让FormHelper显示最终用户提交的值而不是默认值?

的src /窗体/ StartEndForm.php

namespace App\Form;

use Cake\Form\Form;

class StartEndForm extends Form{

    protected function _buildSchema(Schema $schema) {
        return $schema->addField('start', [
                'type' => 'date', 
                'default' => new Time('-1 month')
            ])
            ->addField('end', [
                'type' => 'date', 
                'default' => new Time()
            ]);
    }

    protected function _buildValidator(Validator $validator) {
        return $validator->add('start', 'date', [
                'rule' => ['date'], 
                'message' => 'Please provide a valid date'
            ])
            ->add('end', 'date', [
                'rule' => ['date'], 
                'message' => 'Please provide a valid date'
            ]);
    }

    protected function _execute(array $data) {
        //do some SQL stuff and return the value
    }
}

的src /模板/日志/ index.ctp

echo $this->Form->create($form, [
    'class' => 'start-end-date', 
    'type' => 'get'
]);
echo $this->Form->input('start');
echo $this->Form->input('end');
echo $this->Form->submit('Submit');
echo $this->Form->end();

//If values were returned, create a table
foreach(....)....

1 个答案:

答案 0 :(得分:2)

您使用的是基于GET的表单,即表单值是通过查询字符串发送的,默认情况下,表单帮助程序在查找可能的数据以填充其控件时不会将查询字符串考虑在内因此,您最终会得到使用架构默认值填充的表单。

您可以启用查询字符串查找(从CakePHP 3.4开始提供):

echo $this->Form->create($article, [
    'class' => 'start-end-date', 
    'type' => 'get'
    'valueSources' => [
        'query', // < add this _before_ the default `context` source
        'context'
    ]
]);

这将使表单助手显式查找当前请求中的查询数据,或者您可以切换为使用POST表单,该表单将自动获取数据,因为POST数据是所有内置表单上下文(ArrayEntityFormNull)都会查找默认值,作为后备或主要来源。

另见