在zend 2框架应用程序中请求url上找不到页面

时间:2014-07-25 06:16:33

标签: php zend-framework zend-framework2 zend-db zend-framework-modules

我是zend框架的新手,我正在尝试配置zend。我在窗口7 XAMPP

上成功安装了zendskeleton应用程序

安装完成后,我根据用户指南中的定义创建新模块相册。我根据指南制作了所有代码和页面,但之后我可以打开相册模块。我找不到错误404。

这里是代码

  1. application.config

     return array(
    
     'modules' => array(
     'Application','Album',
     ),
    
    'module_paths' => array(
    './module',
    './vendor',
    ),
    
    'config_glob_paths' => array(
    'config/autoload/{,*.}{global,local}.php',
     ),
    
      ),
        );
    
  2. module.config

     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',
                                 ),
                            ),
                        );
    
  3. Module.php

    namespace Album;
    
     // Add these import statements:
     use Album\Model\Album;
     use Album\Model\AlbumTable;
     use Zend\Db\ResultSet\ResultSet;
     use Zend\Db\TableGateway\TableGateway;
    
     class Module
     {
      // getAutoloaderConfig() and getConfig() methods here
    
    
    
     // Add this method:
      public function getServiceConfig()
       {
          return array(
          'factories' => array(
          'Album\Model\AlbumTable' => function($sm) {
           $tableGateway = $sm->get('AlbumTableGateway');
           $table = new AlbumTable($tableGateway);
           return $table;
       },
         'AlbumTableGateway' => function ($sm) {
          $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
          $resultSetPrototype = new ResultSet();
          $resultSetPrototype->setArrayObjectPrototype(new Album());
          return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
        },
       ),
       );
       }
        }
    
  4. 的httpd-vhosts.conf

     <VirtualHost *:81>
     ServerName zf2-tutorial.localhost
     DocumentRoot "C:/xampp\htdocs/ZendSkeletonApplication/ZendSkeletonApplication-master/public"
     SetEnv APPLICATION_ENV "development"
     <Directory C:/xampp\htdocs/ZendSkeletonApplication/ZendSkeletonApplication-master/public>
      DirectoryIndex index.php
      AllowOverride All
      Order allow,deny
      Allow from all
      </Directory>
      </VirtualHost>
    
  5. system32

    上的主持人条目
      127.0.0.1:8081       zf2-tutorial.localhost
    
  6. enter image description here

    我该怎样处理它。 感谢

4 个答案:

答案 0 :(得分:2)

当您将apache文档根目录指向C:/xampp\htdocs/ZendSkeletonApplication/ZendSkeletonApplication-master/public

您需要在浏览器中使用此网址http://zf2-tutorial.localhost:8081/album 而不是你写的http://zf2-tutorial.localhost/ZendSkeletonApplication/ZendSkeletonApplication-master/public/album

此网址指向不同模块/位置的内部。

//修改

如果这不起作用,请检查您的zf2 /public文件夹是否存在.htaccess文件,否则请使用zend skeleton应用程序中的文件https://github.com/zendframework/ZendSkeletonApplication/blob/master/public/.htaccess

如果apache vhost等于您的port文件端口,请检查您的windows host条目。

确保已加载apache ModRewrite

答案 1 :(得分:1)

您的设置中的基本配置错误会导致此错误。

  1. 我不会一直使用Windows,但是你在路径中使用了前进和后退。首先,您应该为Windows找到正确的目录分隔符并坚持使用它。这似乎有问题:C:/xampp\htdocs/foo/bar/public
  2. 您正在定义一个虚拟主机,它侦听端口81上的任何IP地址(*:81),一个system32主机条目,指向端口8081zf2-tutorial.localhost别名,尝试使用端口zf2-tutorial.localhost/album来呼叫80网址。得到这种错误非常正常。
  3. 在完整阅读官方Getting StartedUsing Apache Web Server文档后,您可以轻松找到解决方案。

答案 2 :(得分:0)

您的网络服务器中似乎缺少vhost条目。这可能是您的申请无法正确解决您的请求的原因。检查&#34;获取startet:骨架应用程序&#34;再次,提供适当的配置。

答案 3 :(得分:0)

您需要此主机文件条目。此文件中无法添加端口。

127.0.0.1 zf2-tutorial.localhost

该网站现在可在zf2-tutorial.localhost:81获得(而不是8081,您将81设置为httpd-vhosts.conf第一行的端口号)