【问题标题】:Problem with resources.layout in Zend frameworkZend 框架中的 resources.layout 问题
【发布时间】:2011-05-31 14:59:51
【问题描述】:

我是 ZF 初学者。

我可以看到http://localhost/square/public

然后我在目录中添加了 var/www/square/layouts 和 master.phtml。 我有以下 /var/www/square/application/configs/appliction.ini

当我访问同一页面时,它没有显示任何内容。

我在这里做错了什么??

提前致谢。

应用程序.ini

[production]
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.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules = ""
resources.layout.layoutPath = APPLICATION_PATH "/layouts"
resources.layout.layout = "master"


[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

注意:

  1. 我设置了一个虚拟主机,所以我可以在http://square.localhost看到,如果我拿出 resources.layout.layoutPath = APPLICATION_PATH "/layouts" resources.layout.layout = "主"

  2. 当我在 /var/www/square/application/modules/default/views/scripts/index/index.phtml 中回显 APPLICATION_PATH 时,如果我不添加,它会输出 /var/www/square/application

    resources.layout.layoutPath = APPLICATION_PATH "/layouts" resources.layout.layout = "主"

  3. 我已将 666 分配给所有文件,将 777 分配给所有目录。

更新:

错误信息如下

致命错误:未捕获的异常 'Zend_Controller_Router_Exception' 带有消息'路由回家不是 定义'在 /var/www/square/library/Zend/Controller/Router/Rewrite.php:318 堆栈跟踪:

0 /var/www/square/library/Zend/Controller/Router/Rewrite.php(464): Zend_Controller_Router_Rewrite->getRoute('home')

1 /var/www/square/library/Zend/View/Helper/Url.php(49): Zend_Controller_Router_Rewrite->assemble(Array, '家',假,真)

2 [内部函数]: Zend_View_Helper_Url->url(Array, '家')

3 /var/www/square/library/Zend/View/Abstract.php(342): call_user_func_array(Array, Array)

4 /var/www/square/application/layouts/master.phtml(15): Zend_View_Abstract->__call('url', 数组)

5 /var/www/square/application/layouts/master.phtml(15): Zend_View->url(Array, 'home')

6 /var/www/square/library/Zend/View.php(108): 包括('/var/www/square...')

7 /var/www/square/library/Zend/View/Abstract.php(880): Zend_View->_run('/var/www/square...')

8 /var/www/square/library/Zend/Layout.php(796): Zend_View_Abstract->render('master.phtml')

9 在 /var/www/square/library/Zend/Controller/Router/Rewrite.php 在第 318 行

更新 2。

我正在阅读一本名为 Zendframework A Beginner Guide 的书。

我在 master.phtml 中有以下内容

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <base href="/" />
    <link rel="stylesheet" type="text/css" href="/css/master.css" />
  </head>
  <body>
    <div id="header">
      <div id="logo">
        <img src="/images/logo.gif" />
      </div>

      <div id="menu">
        <a href="<?php echo $this->url(array(), 'home'); ?>">HOME</a>
        <a href="<?php echo $this->url(array('page' => 'services'), 'static-content'); ?>">SERVICES</a>
        <a href="#">CONTACT</a>
      </div>
    </div>

    <div id="content">
      <?php echo $this->layout()->content ?>
    </div>

    <div id="footer">
      <p>Created with <a href="http://framework.zend.com/">Zend Framework</a>. Licensed under <a href="http://www.creativecommons.org/">Creative Commons</a>.</p>
    </div>    
  </body>
</html>

我注释掉了,它现在显示一个页面。

 <a href="<?php // echo $this->url(array(), 'home'); ?>">HOME</a>
 <a href="<?php // echo $this->url(array('page' => 'services'), 'static-content'); ?>">SERVICES</a>

【问题讨论】:

    标签: php zend-framework layout


    【解决方案1】:

    Shin,我相信你现在已经明白,你所拥有的 master.phtml 假设你已经读完了本书第 2 章的结尾。我犯了同样的错误,即使用配套网站上的 master.phtml,而没有将我带到您的帖子的特定页面上的书中发布的内容进行比较。 :)

    @prodigitalson:  isn't DOCUMENT_ROOT set to APPLICATION_PATH/../public?  not APPLICATION_PATH/public
    

    【讨论】:

      【解决方案2】:

      更新 2

      我很确定您是否已将这 3 行添加到您的 application.ini 并取消注释您的 布局中的代码将解决您的问题

          resources.router.routes.home.route = /home
          resources.router.routes.home.defaults.module = default           
          resources.router.routes.home.defaults.controller = index
          resources.router.routes.home.defaults.action = index  
          resources.router.routes.static-content.route = /content/:page              
          resources.router.routes.static-content.defaults.module = default           
          resources.router.routes.static-content.defaults.controller = static-content
          resources.router.routes.static-content.defaults.action = display      
      

      为我工作:)
      我遇到了这个问题,并认为它应该与 de application.ini 文件有关。但是作为 Zend 中的菜鸟,我无法弄清楚自己要添加什么。

      【讨论】:

        【解决方案3】:

        我想我已经弄清楚了。作者写这本书有点倒退。如果您继续阅读本章,接下来的几页将解释如何创建主路由以及静态内容路由,您的应用程序将再次工作。这只是糟糕的编辑,我已经购买了 4 本书 Zend Framework 书籍,它们似乎都有相同的问题。如果有人花时间在发布损坏的代码并搞砸人们的头脑之前花时间实际尝试/阅读他们自己的一本书,那将是非常好的。这是一件非常令人沮丧的事情:-|。

        【讨论】:

          【解决方案4】:

          空白页表示,有一些错误,但由于此配置而隐藏:

          phpSettings.display_startup_errors = 0
          phpSettings.display_errors = 0 
          resources.frontController.params.displayExceptions = 0 
          

          你能不能改成这样:

          phpSettings.display_startup_errors = 1
          phpSettings.display_errors = 1
          resources.frontController.params.displayExceptions = 1 
          

          并使用错误消息更新您的问题 所以我们可以帮助你:)

          更新 此错误表明 zf 试图查找名为 home 的路由 ,路线减速通常保存在application.ini,所以我不确定这是现成的应用程序还是你是这个应用程序的程序员

          但尝试寻找类似的东西:

          $this->url(<!-- i am not sure what you might here but it usually array of module , controller , action --> , "home") ; 
          

          master.phtml 中再次使用该代码 sn-p 再次更新您的问题

          更新 2

          我很确定您是否已将这 3 行添加到您的 application.ini 并在布局中取消注释您的代码您的问题将得到解决

          resources.router.routes.home.route = /home
          resources.router.routes.home.defaults.module = default           
          resources.router.routes.home.defaults.controller = index
          resources.router.routes.home.defaults.action = index  
          resources.router.routes.static-content.route = /content/:page              
          resources.router.routes.static-content.defaults.module = default           
          resources.router.routes.static-content.defaults.controller = static-content
          resources.router.routes.static-content.defaults.action = display           
          

          【讨论】:

          • 所以我不确定 Zend 为什么在 ZF 的默认配置中使用它
          • 正如我在更新 2 中所写的,如果我注释掉两个回声,我就能够输出。谢谢你的帮助。为您的耐心+1。
          【解决方案5】:

          更新:

          我看到你标记了答案,但我不确定你是否真的解决了这个问题,但看起来你只是缺少路由名称 home 的路由定义。如果你定义了这个,假设你也有一个名为static_content的路由,你应该没问题。


          当我回显 APPLICATION_PATH 时,它会在 .ini 文件中输出 /var/www/square/application 而没有布局。

          APPLICATION_PATH 永远不会有布局......它只是应用程序的路径。在文件系统上。此外,如果您没有在虚拟主机中运行它,APPLICATION_PATH/public 是您的DOCUMENT_ROOT,您可能需要设置:

          resources.frontController.baseUrl = "/square/public"

          为了让一切正常工作...默认情况下,假定APPLICATION_PATH/public 是您的DOCUMENT_ROOT

          您可能在某处遇到错误。修改您的 index.php 以使用开发环境,这样您将看到错误和异常(如果有)。然后使用这些详细信息更新您的问题。

          【讨论】:

            猜你喜欢
            • 2023-03-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多