【问题标题】:How to debug routing in Zend Framework?如何在 Zend Framework 中调试路由?
【发布时间】:2011-03-21 07:31:45
【问题描述】:

我的 Zend 框架路由设置没有按预期工作。当我访问“站点”时,会根据需要执行 application/modules/default/views/script/index/index.phtml 下的代码。

但是,当我尝试“站点/主页”时,我得到一个 404 错误页面。 apache 日志显示(文件不存在:/var/www/site/public/home)。此外,访问http://site/default/index/index 会产生相同的结果。 (http://site/index 工作正常。)

Zend 版本:1.10.8

Apache /etc/apache2/apache2.conf:

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot "/var/www/site/public"

    <Directory /var/www/site/public>
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

我的 /var/www/site/public/.htaccess 文件

SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

我的 /var/www/site/public/index.php

...
/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

我的 application.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.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.params.displayExceptions = 0
resources.modules = ""

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.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

resources.view[] =

autoloaderNamespaces[] = "Site_"

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

我已经尝试将路由移动到 routes.ini 并将它们添加到 application/Bootstrap.php 中,如下所示:

   $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'production');
   $router = new Zend_Controller_Router_Rewrite();
   $router->addConfig($config, 'routes');

  $r = new Zend_Controller_Router_Route(
      'home/',
      array(
          'controller' => 'index',
          'action'     => 'index'
      )
  );
  $router->addRoute('home', $r);

但是,它没有帮助。我花了一整天的时间浏览手册、书籍和网络论坛,试图找到问题,但无济于事。 (我一直在关注 Vikram Vaswani 的“Zend Framework”。)

【问题讨论】:

  • 你知道404错误是来自Apache还是ZF?我看不出您发布的内容有任何明显错误。

标签: php zend-framework routing


【解决方案1】:

我的虚拟主机目录:

<Directory /var/www/site/public/>
    Options Indexes FollowSymlinks

    php_admin_flag engine on
    php_admin_flag safe_mode off
    php_admin_value open_basedir none
</Directory>

【讨论】:

    【解决方案2】:

    试试这个 apache 虚拟主机配置:

    <VirtualHost *:80>
        DocumentRoot "/var/www/site/public"
        ServerName mysite
    
        <Directory "/var/www/site/public">
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
    

    【讨论】:

    • 很抱歉解决了这个问题,但感谢您解决了我遇到的类似问题。 Zf 不会加载任何控制器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多