这是CakePHP /一般PHP问题。
在我的应用程序中,我使用像/login?continue=/admin/posts
这样的查询字符串
此查询字符串用于将用户重定向到查询中的URL,但它不起作用,因此看起来应用程序看不到字符串...
这让我感到疑惑,因为当你到达带有字符串的页面时,它是一个GET请求,当你登录时,它变成了POST或XML请求(如果使用AJAX)。我是否需要手动将查询字符串添加到表单以供POST查看?
在表单操作或隐藏输入中?还是我在错误的树上吠叫?
我正在抓住这样的查询:
if(isset($this->params['url']['continue']))
{
$pathtoredirect = $this->params['url']['continue'];
}
else
{
$pathtoredirect = $this->Auth->redirect();
}
但那是在POST请求中,所以也许查询丢失了......将它添加到隐藏的输入中并不能解决当前代码的问题所以我要么改变代码来查看隐藏字段或传递查询表单上的操作?
e.g。 <form action="/login?continue=/admin/posts" method="post">
我认为这是正确的吗?任何人都能提供我提到的两种方法的解决方案或优缺点吗?
总之,我问的是如何将查询字符串添加到表单操作值
目前看起来像:
php echo $this->Form->create('User',
array(
'id' => 'loginform',
'type' => 'post',
'url' => array
(
'admin'=>false,
'controller' => 'users',
'action' => 'login'
)
)
);
那么如何将查询字符串添加到表单?
由于
答案 0 :(得分:1)
当收到POST请求时,你可以通过superglobals $ _POST和$ _GET接收POST和GET变量。
您可以在$ _GET中发送参数,方法是将其包含在表单的action
属性中,或者通过在表单中创建<input type="hidden">
标记将其发送到$ _POST
答案 1 :(得分:0)
斜杠(/
)是保留字符。使用%2F
对其进行编码。
http://blooberry.com/indexdot/html/topics/urlencoding.htm#whatwhy
答案 2 :(得分:0)
解决方案是这样做:
<?php echo $this->Form->create('User',
array('id' => 'loginform', 'type' => 'post',
'url' => array('admin'=>false,'controller'=>'users','action'=>'login','url'=>$this->params['url']['continue']))); ?>
因为我已经设置了一条路线来处理额外的URL参数:
Router::connect('/auth/login', array('controller'=>'users','action'=>'login'));
Router::connect('/auth/login?continue=:url',
array('controller'=>'users','action'=>'login'),
array(
'url' => '[A-Za-z0-9/\._-]+',
'pass' => array('url')
));
如果有人发现我这样做有任何问题,请随时发表评论。