【发布时间】:2016-03-10 12:57:36
【问题描述】:
你做了什么
echo $this->Form->create(null, [
'type' => 'get',
'url' => ['controller' => 'Holidays', 'action' => 'calendar']
]);
echo $this->Form->month('month', ['empty' => 'Select month', 'value' => @$month]);
echo $this->Form->year('year', ['minYear' => date('Y'), 'maxYear' => 2020, 'empty' => 'Select year', 'value' => @$year]);
预期行为
我期待在提交表单时,我的结果 url 看起来像 example.com/holiday/calendar?month=03&year=2016
实际行为
example.com/holidays/calendar?month%5Bmonth%5D=03&year%5Byear%5D=2016
最初的想法
所以首先想到的是使用name 选项。
echo $this->Form->month('month', ['name' => 'foo', 'empty' => 'Select month', 'value' => @$month]);
这将产生具有相同问题的<select name="foo[month]"..。
第二个想法
自定义表单输入模板。这不允许自定义名称令牌,因为它作为 {{name}} 传递,所以当它到达模板时为时已晚。
第三个想法
使用数组并将字段命名为相同。
echo $this->Form->month('month', ['name' =>'when', 'empty' => 'Select month', 'value' => @$month]);
echo $this->Form->year('year', ['name' => 'when', 'minYear' => date('Y'), 'maxYear' => 2020, 'empty' => 'Select year', 'value' => @$year]);
我会期待example.com/holidays/calendar?when[month]=03&when[year]=2016,但实际上你会得到/holidays/calendar?when%5Bmonth%5D=02&when%5Byear%5D=2016
结论
不幸的是,我无法通过三种不同的方法解决这个用例。如果有人知道如何自定义表单助手生成的 html 名称属性,或者防止获取表单被转义,我会很感兴趣,这样我的网址就不会看起来那么混乱。
【问题讨论】:
-
这是默认行为。您可以只创建一个列出月份名称的选择。但我不明白:以
foo[month]形式输入有什么问题? -
主要是不够灵活,后来改用数组了,就是看起来很乱。
标签: html forms cakephp cakephp-3.0 formhelper