一个控制器很多观点

时间:2010-06-04 08:41:09

标签: zend-framework

当我最初构建我的网站时,它只处理一个接口,但现在我需要处理许多接口。

我可以检测每个请求发送哪个站点,并将每个站点与其他站点隔离,但所有站点都具有相同的视图。

有没有办法可以从同一个控制器渲染不同的视图?

我在想:

application
            controller
            model
            site_1_view
            site_2_view

这可能吗?

5 个答案:

答案 0 :(得分:0)

$this->view->render('script.phtml'); 

应该有用。

答案 1 :(得分:0)

或者:

public function myAction() 
{
    return $this->otherAction();
}

public function otherAction() 
{

}

答案 2 :(得分:0)

添加新的脚本路径以进行查看 LIFO堆栈

答案 3 :(得分:0)

只是一个想法:检测当前正在查看的网站,然后通过设置$view->setScriptPath(/path/to/site1/scripts/);

告诉Zend_View使用该特定网站的脚本

编辑:我可能在这个问题上错了,但设置它的最佳位置是preDispatch方法中的控制器插件,因为那时你会知道模块/控制器/动作是什么请求但尚未发送:http://framework.zend.com/manual/en/zend.controller.plugins.html

答案 4 :(得分:0)

这很简单 - 我发现我可以在构造函数中设置视图基本路径:

$this->view->setBasePath("../application/site_1_view/views");

所以在public/index.php中,我检测到URL,在会话中设置它,从我的数据库中检测名称,然后使用名称来设置基本路径:

$this->view->setBasePath("../application/".$siteName."/views");

所以应用程序结构现在是:

 application
            controllers
            model
            site_1_view
                         views
                                scripts
                                         controllerName
                                                        ActionName 

            site_2_view
                         views
                                scripts
                                         controllerName
                                                        ActionName