ZendSkeleton 404错误 - 路由

时间:2015-11-18 22:05:59

标签: php module zend-framework2 http-status-code-404 zend-route

所以我一直在关注相当简单的zend 2骨架示例“专辑”。我跟着每一步都走到了牙齿,但是当我输入http://hostname/album进行索引时,我无法逃避 404错误 - 请求的网址无法与路由匹配,或http://hostname/album/add进行添加等等。

当然,我查看了 module.config.php 文件中的路由:

 <?php
 return array(
 'controllers' => array(
     'invokables' => array(
         'Album\Controller\Album' => 'Album\Controller\AlbumController',
     ),
 ),
 'router' => array(
     'routes' => array(
         'album' => array(
             'type'    => 'segment',
             'options' => array(
                 'route'    => '/album[/:action][/:id]',
                 'constraints' => array(
                     'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                     'id'     => '[0-9]+',
                 ),
                 'defaults' => array(
                     'controller' => 'Album\Controller\Album',
                     'action'     => 'index',
                 ),
             ),
         ),
     ),
 ),
 'view_manager' => array(
     'template_path_stack' => array(
         'album' => __DIR__ . '/../view',
     ),
 ),
);

这里的一切看起来都不错,所以我查看 Module.php ,其中 module.config.php 从中加载:

 <?php
  namespace Album;

  use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
  use Zend\ModuleManager\Feature\ConfigProviderInterface;

  class Module implements AutoloaderProviderInterface, ConfigProviderInterface
  {
      public function getAutoloaderConfig()
      {
         return array(
         'Zend\Loader\ClassMapAutoloader' => array(
             __DIR__ . '/autoload_classmap.php',
         ),
         'Zend\Loader\StandardAutoloader' => array(
             'namespaces' => array(
                 __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
             ),
         ),
     );
     }

     public function getConfig()
     {
          return include __DIR__ . '/config/module.config.php';
     }
  }

同样,这里的一切看起来都很好。现在我想也许问题是我没有在 application.config.php 文件中包含Album模块(删除了注释):

<?php
return array(

'modules' => array(
    'Application',
    'Album',
),

'module_listener_options' => array(

    'module_paths' => array(
        './module',
        './vendor',
    ),

    'config_glob_paths' => array(
        'config/autoload/{{,*.}global,{,*.}local}.php',
    ),

);

但它包括在内。我还有 AlbumController.php 和视图(.phtml)文件的确切位置。我多次检查路径,但路线仍然无法正常工作。有任何想法吗?任何建议将不胜感激。

PS - 我使用的是Ubuntu 14.04虚拟盒。

修改

这是应用程序的目录结构:(我只是列出相关文件/文件夹以使其更具可读性)

  • ZendSkel
    • 公共
      • index.php
    • 配置
      • application.config.php
    • 模块
      • 应用
      • 相册
        • Module.php
        • 配置
          • module.config.php
        • SRC
          • 相册
            • 控制器
              • AlbumController.php
            • 模型
            • 表格
        • 视图
          • 专辑
            • 专辑
              • index.phtml
              • add.phtml
              • edit.phtml
              • delete.phtml

另外,我正在使用apache2.2的虚拟主机。

3 个答案:

答案 0 :(得分:0)

对于仍在寻找此问题解决方案的任何人,

清除数据/缓存文件夹,允许路由按预期工作。

答案 1 :(得分:0)

就像@Mayank Awasthi一样:

清除数据/缓存文件夹,允许路由以 预期的。

这适用于Zend AND 椎板。

如果问题与缓存无关,请检查您的配置和路由文件!

答案 2 :(得分:0)

如果您按照官方页面中的教程一步一步进行操作并显示 404。请确保 1- 停止发球, 2-输入“composer development-enable”。 3-输入“作曲家服务” 然后它应该工作。该教程确实提到了“composer development-enable”,但没有按正确的顺序提到它,这就是为什么很多人不断获得 404 的原因