如何重定向到控制器模板中的另一个操作?

时间:2013-05-22 18:12:32

标签: php redirect kohana kohana-3

我这个类扩展了Controller_Template。

<?php defined('SYSPATH') or die('No direct script access.');


    abstract class Controller_Common extends Controller_Template {

        public $template = 'main';

        public function before()
        {
            parent::before();
            View::set_global('title', 'Мій сайт');              
            View::set_global('description', 'Сайт');
            $this->template->content = '';
            $this->template->styles = array('style');
            $this->template->scripts = '';
        }

    } // End Common

在控制器类中,我想重定向到另一个动作。

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_User extends Controller_Common {
    public function action_info()
    {
        $this->template->content = View::factory('user/info')
            ->bind('user', $user);

        // Load the user information
        $user = Auth::instance()->get_user();

        // if a user is not logged in, redirect to login page
        if (!$user)
        {
            Request::current()->redirect('user/login');
        }
    }
    public function action_login() 
    {
    try{

        if (HTTP_Request::POST == $this->request->method()) 
        {
            // Attempt to login user
            $remember = array_key_exists('remember', $this->request->post()) ? (bool) $this->request->post('remember') : FALSE;
            $username = $this->request->post('username');
            $password = $this->request->post('password');
            $user = Auth::instance()->login($username, $password, true);

            $logged = Auth::instance()->logged_in('login');

            // If successful, redirect user
            if($user) 
            {
            $this->redirect("user/info");
            } 
            else 
            {
                $message = 'Login failed';
            }
        }
        /**/
        }catch(Exception $e)
        {
            var_dump($e->getMessage());
        }
        $this->template->content = View::factory('user/login')
            ->bind('message', $message);
    }

    public function action_logout() 
    {
        /*// Log user out
        Auth::instance()->logout();

        // Redirect to login page
        Request::current()->redirect('user/login');*/
    }

}
?>

我在action_login

中使用此代码
$this->redirect("user/info");

但重定向不起作用。如何解决这个问题? 我使用Kohana 3.3.0版本

2 个答案:

答案 0 :(得分:2)

Request类没有redirect方法。见userguide

HTTP::redirect('user/login', 302);

self::redirect('user/login', 302);

PS。 Controller::redirect()static method,因此用户指南示例似乎不正确。

答案 1 :(得分:1)

从action_login中删除try..catch,http :: redirect使用重定向例外HTTP::Redirect

P.S。您可以使用 $ this self 进行重定向,$this vs self