2013-02-06 31 views
0

我有以下结构的Zend的应用程序:Zend框架 - 多个模块,一个布局

application 
    configs 
     application.ini 
    modules 
     api 
      controllers 
      Bootstrap.php 
     default 
      controllers 
       IndexController.php 
      models 
      views 
       scripts 
        index 
         index.phtml 
       layouts 
        layout.phtml 
      Bootstrap.php 

我的应用程序/ CONFIGS /的application.ini看起来是这样的:

phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 
resources.db.adapter = "PDO_SQLITE" 
resources.db.params.dbname = APPLICATION_PATH "/../data/db/test.sqlite3" 

resources.modules = "" 

resources.frontController.params.prefixDefaultModule = "1" 
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.layout.layoutPath = APPLICATION_PATH "/modules/default/views/layout/" 

我的问题是无论我做什么,我都无法使用布局。 如果我去http://test.app/index/index,我可以看到视图脚本的输出,但看不到布局。

+0

真的,我会想你会得到一个没有布局的错误。如果您将布局路径更改为无效,那么您是否收到错误?你的主应用程序引导程序中是否有任何init方法,或者任何其他布局相关的布局? –

+0

@TimFountain不,你没有布局没有错误。另外我认为上面的问题是他忘了初始化他的布局(如你在bootstrap或任何需要的地方添加的)。虽然当你有无效的路径时你会得到错误,所以如果他没有得到任何错误路径应该没问题。 –

回答

2

我看到你指定了布局路径,但从来没有使用实际的布局文件。假设布局被命名为layout.phtml,请将其添加到应用程序的ini中。

resources.layout.layout = "layout" 

如果您需要使用多个布局,则可以在每个操作/控制器级别上覆盖。在控制器,你可以通过$this->_helper->layout() 那么你有方法,如达到布局:setLayoutPath()setLayout()disableLayout()

参考:http://framework.zend.com/manual/1.12/en/learning.layout.usage.html

+0

如果我没有指定实际的布局文件,是不是需要一个默认的layout.phtml? – Zorrocaesar

+0

呃......试试看看?这个“默认layout.phtml”在哪里?你创造它?默认名称是什么? default.phtml? layout.phtml?我不喜欢默认和模糊。明确。你尝试了我的建议吗? – ficuscr

+0

我在这里找到了答案:http://framework.zend.com/manual/1.12/en/zend.layout.options.html Quote:“layout:要使用的布局。使用当前的偏转器来解析名称提供给相应的布局视图脚本。默认情况下,此值为'layout'并解析为'layout.phtml'。访问者为setLayout()和getLayout()。 – Zorrocaesar

0

需要初始化布局文件中的bootstrap.php或的application.ini为了能够使用它,你还没有声明使用哪个文件。

在bootstrap.php中

function _initViewHelpers() 
{ 
    $this->bootstrap('layout'); 
    $layout = $this->getResource('layout'); 
    $view = $layout->getView(); 
} 

,你应该是好去,如果你想有多个布局,并有不同的条件下使用的布局,你应该看看this answer here这是很酷。