目前我正在创建一个控制器(ZendFramework),它通过给定的id从数据库获取URL字符串。
/linker/show/id/6
即。 id=6
/products/list/type/games
。
在LinkerController
中,我会使用_forward()
方法传递可选参数(POST,GET),但此方法使用($action, $controller, $module, $params)
和我的字符串/products/list/type/games
之类的参数现在无效。
我也不想重定向到此网址(用户不应该看到他在ProductController
)。
任何想法如何解决?
答案 0 :(得分:1)
您无法转发到URL(因为转发的性质 - 创建新的内部请求对象)。您只能转发请求(模块,控制器,操作)。
使用重定向insted(在控制器中):
$this->_helper->redirector->gotoUrlAndExit($url);
答案 1 :(得分:1)
这很棘手。您希望在重定向和转发之间进行混搭。
向后工作:
您需要拨打$ this-> _forward($ action,$ controller,$ module,$ params)
因此,您需要将这四个参数存储在链接器表中($ params将被序列化)
然后,您的链接器代码可能如下所示:
public function showAction()
{
$linker_table = new LinkerTable();
$link = $linker_table->find(array('id' => $this->_getParam('id')));
// first, try to forward, if all settings are there
if ( $link && $link->hasForwardSettings() ) {
$this->_forward( $link->action, $link->controller, $link->module, unserialize($link->params));
return;
}
// perhaps other links can just be straight redirects, so then $this->_redirect($link->url)
}
要么是一些mod_rewrite魔法。