名称

Yaf_Controller_Abstract::forward

(Since Yaf 1.0.0.5)

public boolean Yaf_Controller_Abstract::forward( string  $action ,
                                                 array  $params = NULL );

public boolean Yaf_Controller_Abstract::forward( string  $controller ,
                                                 string  $action ,
                                                 array  $params = NULL );

public boolean Yaf_Controller_Abstract::forward( string  $module ,
                                                 string  $controller ,
                                                 string  $action ,
                                                 array  $params = NULL );

将当前请求转给另外一个动作处理

[注意] 注意
Yaf_Controller_Abstract::forward只是登记下要forward的目的地, 并不会立即跳转. 而是会等到当前的Action执行完成以后, 才会进行新的一轮dispatch.
参数
$module

要转给动作的模块, 注意要首字母大写, 如果为空, 则转给当前模块

$controller

要转给动作的控制器, 注意要首字母大写, 如果为空, 则转给当前控制器

$action

要转给的动作, 注意要全部小写

$params

关联数组, 附加的参数, 可通过Yaf_Request_Abstract::getParam获取

返回值

成功返回Yaf_Controller_Abstract, 失败返回FALSE

例子

例 11.55. Yaf_Controller_Abstract::forward 的例子

     
     <?php
     class IndexController extends Yaf_Controller_Abstract {
        public funciton init() {
           /**
            * 如果用户没登陆, 则转给登陆动作
            */
           if($user_not_login) {
              $this->forward("login");
           }
        }
     }
     ?>
     
    


如何立即交出控制权

由于forward只是登记目的地, 当前动作方法中剩余的代码仍会继续执行. 如果想立即交出控制权, 请在调用forward之后从当前动作方法中返回; 返回FALSE还会告诉Yaf不要自动渲染当前视图:

例 11.93. Yaf_Controller_Abstract::forward 立即返回的例子

<?php
class IndexController extends Yaf_Controller_Abstract {
    public function indexAction() {
        $logined = $_SESSION["login"];
        if (!$logined) {
            $this->forward("login", array("from" => "Index")); // 转发到login动作
            return false; // 结束当前流程, 并告诉Yaf不要自动渲染
        }

        // 其他处理
    }

    public function loginAction() {
        echo "login, redirected from ", $this->_request->getParam("from"), " action";
    }
}
?>