Как перенаправить из вида в Кохане - PullRequest
2 голосов
/ 19 мая 2011

У меня есть функция 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 ]

8 голосов
/ 19 мая 2011

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 обрабатывает это, поэтому вам просто нужно указать контроллер / действие / параметры.

2 голосов
/ 19 мая 2011

Поскольку ваш вопрос помечен как Kohana, я предполагаю, что вы используете его.

Kohana - это так называемая среда MVC. Представление не должно содержать таких вещей, как перенаправления и проверка значений $_POST. Он не должен содержать основную логику вообще. Представления просто предназначены для презентации .

Вы должны поместить свой редирект в ваш контроллер. Это также место, где вы должны проверить значения $_POST и проверить их. Из контроллера вы можете передать значения $ _POST в представление.

2 голосов
/ 19 мая 2011

Попробуйте использовать

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

Снаружи вы можете использовать этот код

<?php
Request::initial()->redirect('url');
0 голосов
/ 19 мая 2011

PHP header("Location: .."); принимает только полный полный URL, поэтому простая передача page/param1/param2 не будет работать.

Вам нужно:

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

Или еще лучше:

url::redirect('page/param1/param2');
0 голосов
/ 19 мая 2011

Из того, что я вижу в вашем вопросе, я предполагаю, что вы используете функцию заголовка после того, как уже вывели какой-то контент.

header () может использоваться только перед отправкой пользователю какой-либо формы вывода.

Попробуйте поместить верхний колонтитул перед печатью

<?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;
     }
}
?>

и после установки перенаправления другой код не должен запускаться.

Я надеюсь, что это то, что вы пытаетесь достичь :)

...