0

最后,一个简单直接的问题:D

背景:我的公司已经改变了他们在使用某些网站时的处理方式。以前,某些站点仅在某些周交付;现在,每个站点每周都会交付。他们要求我去掉他们“添加新站点”表单上的星期字段。然而,星期和站点之间的链接仍然是代码正常工作所必需的,所以我试图隐藏该字段并每周填充它。

自动填充它很简单。我只是这样做:

echo $this->Form->input('Week', array('value'=>array('1','2','3','4','5')));

当我调试从表单发送的数据时,我得到以下信息,这正是我希望它工作的方式。

'Week' => array(
    'Week' => array(
        (int) 0 => '1',
        (int) 1 => '2',
        (int) 2 => '3',
        (int) 3 => '4',
        (int) 4 => '5'
    )

所以下一步就是简单地隐藏该输入。容易,对吧?我只是对表单执行以下两件事之一:

echo $this->Form->hidden('Week', array('value'=>array('1','2','3','4','5')));

或者

echo $this->Form->input('Week', array('value'=>array('1','2','3','4','5'), 'type'=>'hidden'));

我所做的就是将类型更改为隐藏。但是现在,从表单中调试数据返回的数据是这样的:

'Week' => array(
    'Week' => '1 2 3 4 5'

所以我的问题是,普通“输入”字段和“隐藏”字段之间处理数据的方式有什么区别。为什么会出现这种差异,为什么它很重要?对于这个特定问题,我如何让隐藏数据以与正常输入数据相同的方式运行?

4

1 回答 1

0

正如您在评论中所说,Week是一个多项选择输入,这就是值处理不同的原因。如果输入是允许多项选择的内容(例如多项选择或复选框),那么所有值都以数组的形式出现是合乎逻辑的。但是隐藏类型基本上是隐藏的文本输入(好吧,也许不是,但我正在简化)。看,如果你把

echo $this->Form->input('Week', array('type'=>'text', 'value'=>array('1','2','3','4','5')));

您将获得与输入字段相同的字符串,因此它是否隐藏无关紧要。

现在,对于您的情况,您可以将周值添加为字符串,并更改您在发布时处理值的方式,作为字符串而不是数组。

但是,如果由于某种原因这不可能(太多代码无法更改等),那么请保留您现在拥有的相同代码,并用 css 隐藏它。就像是

echo $this->Form->input('Week', array('value'=>array('1','2','3','4','5'),
                                'div'=>array('style'=>'display:none')));

应该可以解决问题(也许需要添加更多样式,先尝试一下)。

我不太喜欢 css 解决方案,浏览器可以以不同的方式解释 css 等等……但它符合您的需求,您无需更改任何其他内容。


编辑

不过,在第二个方面,仅使用隐藏字段就可以实现相同的数组输出。虽然不是很漂亮。您必须更改每个输入的名称以告诉 php 它是一个数组,如下所示

echo $this->Form->input('Week1', array('type'=>'hidden', 'value'=>1, 'name'=>'data[Week][Week][]'));
echo $this->Form->input('Week2', array('type'=>'hidden', 'value'=>3, 'name'=>'data[Week][Week][]'));
echo $this->Form->input('Week3', array('type'=>'hidden', 'value'=>4, 'name'=>'data[Week][Week][]'));

重要的部分是每个输入的名称选项,请参阅数组参考?特地最后一个空[]。这实际上就是 cakephp 将所有数据作为数组发送的方式。您是否尝试过在蛋糕中创建没有 FormHelper 的表单?$this->request->data['form_name']除非您为所有表单字段设置输入名称,否则您将无法获取帖子数据。

Cake 通过使用多个输入$data命名所有输入,并在数组中发送所有发布数据(最后是空数组,因此它被数字索引)。您可以看到在使用 cake 中的 formhelper 创建的任何其他表单上使用任何 html 检查器。<input name="data[ModelName][field_name]"<input name="data[ModelName][field_name][]"

我希望它很清楚......我会在这里坚持使用 css 解决方案。多个隐藏的输入看起来更混乱。

于 2013-06-21T19:27:14.243 回答