转发给定的URL字符串

时间:2009-12-07 14:18:54

标签: php zend-framework

目前我正在创建一个控制器(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)。

任何想法如何解决?

2 个答案:

答案 0 :(得分:1)

您无法转发到URL(因为转发的性质 - 创建新的内部请求对象)。您只能转发请求(模块,控制器,操作)。

使用重定向insted(在控制器中):

$this->_helper->redirector->gotoUrlAndExit($url);

答案 1 :(得分:1)

这很棘手。您希望在重定向和转发之间进行混搭。

向后工作:

  1. 您需要拨打$ this-> _forward($ action,$ controller,$ module,$ params)

  2. 因此,您需要将这四个参数存储在链接器表中($ params将被序列化)

  3. 然后,您的链接器代码可能如下所示:

    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魔法。