搜索主键时,CakePhp2 搜索表单从 post 切换到非 post
CakePhp2 Search form switches from post to not post, when searching for the primary key
今天我发现了一个非常奇怪的行为,我想阻止它。
我使用 CakePhp 2.9 并有一个搜索表单,我想用它来搜索订单。由于与其他模型的关系,我在模型中的主键是 session_id。
class Order extends AppModel
{
public $primaryKey = 'session_id';
我用
打开我的搜索表单
<?php echo $this->Form->create(
'Order',
array(
'url' => array('controller' => 'orders', 'action' => 'search')
)
); ?>
结果如下 HTML:
<form id="OrderSearchForm" action="/orders/search" method="post" accept-charset="utf-8">
在控制器中,我根据请求是否为 post 类型做不同的事情。
为了调试奇怪的行为,我在控制器中添加了以下调试行:
if ($this->request->is('post')) {
debug('post');
} else if ($this->request->is('get')) {
debug('get');
} else {
debug($_REQUEST);
debug($_GET);
debug($_POST);
}
因此,只要我搜索订单 session_id 以外的其他值,或者将 session_id 与其他搜索值组合,一切都很好。
但是,只要我只搜索 session_id,搜索表单生成的 HTML 就会更改为
<form id="OrderSearchForm" action="/orders/search/mysearchvaluesessionidstring" method="post" accept-charset="utf-8">
然后当我提交表格时,它突然不再被视为 "post"。 $_GET 的调试输出仍然是空的,$_POST 的调试输出仍然是填充的,但是不再触发条件 if ($this->request->is('post'))。
如何改变这种行为?
当请求数据仅包含会话 ID 时,cake 可能正在将请求类型更改为 PUT
。您可以通过检查 if ($this->request->is(array('post', 'put')))
而不是仅仅检查 POST
请求来解决这个问题。
您可以详细了解为什么会发生这种情况here
今天我发现了一个非常奇怪的行为,我想阻止它。
我使用 CakePhp 2.9 并有一个搜索表单,我想用它来搜索订单。由于与其他模型的关系,我在模型中的主键是 session_id。
class Order extends AppModel
{
public $primaryKey = 'session_id';
我用
打开我的搜索表单 <?php echo $this->Form->create(
'Order',
array(
'url' => array('controller' => 'orders', 'action' => 'search')
)
); ?>
结果如下 HTML:
<form id="OrderSearchForm" action="/orders/search" method="post" accept-charset="utf-8">
在控制器中,我根据请求是否为 post 类型做不同的事情。 为了调试奇怪的行为,我在控制器中添加了以下调试行:
if ($this->request->is('post')) {
debug('post');
} else if ($this->request->is('get')) {
debug('get');
} else {
debug($_REQUEST);
debug($_GET);
debug($_POST);
}
因此,只要我搜索订单 session_id 以外的其他值,或者将 session_id 与其他搜索值组合,一切都很好。 但是,只要我只搜索 session_id,搜索表单生成的 HTML 就会更改为
<form id="OrderSearchForm" action="/orders/search/mysearchvaluesessionidstring" method="post" accept-charset="utf-8">
然后当我提交表格时,它突然不再被视为 "post"。 $_GET 的调试输出仍然是空的,$_POST 的调试输出仍然是填充的,但是不再触发条件 if ($this->request->is('post'))。
如何改变这种行为?
当请求数据仅包含会话 ID 时,cake 可能正在将请求类型更改为 PUT
。您可以通过检查 if ($this->request->is(array('post', 'put')))
而不是仅仅检查 POST
请求来解决这个问题。
您可以详细了解为什么会发生这种情况here