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获取
例 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";
}
}
?>