如何从kohana中的视图重定向

时间:2011-05-19 04:12:42

标签: php redirect kohana

我有一个名为action_reg_user的函数,它将数据插入数据库。我试着做通常的事情:

header('Location:page/param1/param2');

但它不起作用

<?php

if(!empty($_POST)){
    $username = $_POST['uname'];
    $pword = md5($_POST['pword']);
    print_r($_POST);

?>
<a href="reg_user/<?php echo $username; ?>/<?php echo $pword; ?>">Continue Registration</a> 

<?php } ?>

5 个答案:

答案 0 :(得分:8)

在最终页面准备好返回浏览器之前,Kohana不会生成请求标头。如果您查看application/bootstrap.php,您会看到最近的位置:

echo Request::instance()
    ->execute()
    ->send_headers()
    ->response;

所以你要做的就是到达Request对象并让它为你做重定向。通常,这应该在您的控制器中完成,而不是您的视图。在控制器中,您可以执行$this->request->redirect('kohana/path')。如果您坚持在视图中执行此操作,则希望Request::current()->redirect('kohana/path')重定向分层链中当前正在执行的请求。

小心并注意那些在路径URL::base句柄中没有使用Request::redirect,所以你只需要指定控制器/动作/参数。

答案 1 :(得分:2)

尝试使用

<?php
$this->request->redirect('url/to/redirect/');

外部操作可以使用此代码

<?php
Request::initial()->redirect('url');

答案 2 :(得分:2)

由于您的问题被标记为Kohana,我假设您正在使用它。

Kohana是一个所谓的MVC框架。视图不应包含重定向和检查$_POST值等内容。它根本不应包含主要逻辑。视图仅适用于演示文稿

您应该将重定向放在控制器中。这也是您应该检查$_POST值并验证它们的地方。从控制器,您可以将$ _POST值传递给视图。

答案 3 :(得分:0)

根据我在你的问题上看到的情况,我假设你在输出一些内容后正在使用标题功能。

header()只能在将任何形式的输出发送回用户之前使用。

尝试在执行print_r之前将标题置于顶部

<?php  
if(!empty($_POST)){
     $username = $_POST['uname'];
     $pword = md5($_POST['pword']);
     action_reg_user($username,$pword);
     if (/* data saved */){
        header('Location: page/param1/param2');  
        exit;
     }
}
?>

并且一旦设置了重定向,就不应运行其他代码。

我希望这是你想要完成的事情:)

答案 4 :(得分:0)

PHP header("Location: ..");只接受绝对完整的网址,因此简单的传递page/param1/param2将无效。

你需要:

header("Location:" . url::base() . "page/param1/param2");

甚至更好:

url::redirect('page/param1/param2');