【问题标题】:404 error, Zend Framework 2 The requested URL could not be matched by routing404 错误,Zend Framework 2 请求的 URL 无法通过路由匹配
【发布时间】:2013-02-19 15:19:19
【问题描述】:

我明白了:

发生 404 错误

找不到页面。请求的 URL 无法通过路由匹配。

我的module.config.php 文件是:

'router' => array(
    'router' => array(
        'Test' => array(
            'type' => 'Segment',
            'options' => array(
                //http://localhost/Test/Test
                'route' => '/Test[/[:action]]',
                'constraints' => array(
                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
             ),
             'defaults' => array(
                 'controller' => 'Test\Controller\Test',
                 'action' => 'Test'
              ),
          ),
      ),
   ),
),

请帮忙,我是 Zend Framework 2 的新手!

【问题讨论】:

    标签: zend-framework2


    【解决方案1】:

    你应该在 ZendSkeletonApplication 中使用类似 Application 模块的配置:

    'router' => array(
        'routes' => array(
            'test' => array(
                'type'    => 'Literal',
                'options' => array(
                    'route'    => '/book',
                    'defaults' => array(
                        '__NAMESPACE__' => 'Test\Controller',
                        'controller'    => 'Test',
                        'action'        => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'default' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/[:controller[/:action]]',
                            'constraints' => array(
                                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
    

    您只需添加以下代码:

    'test' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '[/:action][/:id]',
                            'constraints' => array(
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'id'     => '[0-9]*',
                            ),
                            'defaults' => array(
                                '__NAMESPACE__' => 'Test\Controller',
                                'controller'    => 'Test',
                                'action'        => 'index',
                            ),
                        ),
                    ),
    

    将此代码添加到 'child-routes' 键,然后您将访问 url:localhost/:controller_name/:action_name/:id(例如:http://zf.dev/test/indexhttp://zf.dev/test/add/1)。现在它的工作! 此代码可以修复 zf2 文档中教程的错误 404。

    【讨论】:

      【解决方案2】:

      你有一个错字,试试这个:

      'router' => array(
          'routes' => array(
      

      路由而不是路由两次..

      【讨论】:

      • 谢谢你回答朋友,我添加了路由和:致命错误:D:\wamp\www\zf\web\vendor\zendframework\zendframework 中找不到类'Test\Controller\TestController' \library\Zend\ServiceManager\AbstractPluginManager.php 第 17 行
      • 你是否为你的控制器创建了一个可调用对象?: 'controllers' => array( 'invokables' => array( 'Test' => 'Test\Controller\TestController',
      • 您还需要确保您的控制器确实存在:)
      • 是的,我有:返回数组('controllers' => array('invokables' => array('Test\Controller\Test' => 'Test\Controller\TestController'), ),
      • 你能发布一些控制器代码吗?控制器类中的命名空间是否正确?
      【解决方案3】:

      实现修复它,我缺少字母“d”,因此:Zend \ Loader \ StandarAutoloader 我添加了“d”:Zend \ Loader \ StandardAutoloader。问候朋友。提示:Zend Studio 10 和他的 de ZF2 版本非常适合这一刻!

      【讨论】:

        【解决方案4】:

        请检查 .htaccess 文件和 index.php 文件。如果这些存在于公用文件夹中,则必须使用 url 作为

         http://localhost/public/Test/Test.
        

        您的代码几乎是正确的。安德鲁很好地指导了你。让我知道你的回应。

        【讨论】:

        • 谢谢你的回答,我的 .htacces 中有这个: RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ RewriteRule ^(.*)$ - [E=BASE:%1] RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
        • 您是否在 application.config.php 文件中包含了模块名称。 'modules' => 数组('Test', ),
        • 嗨,user2003356 我的 application.config.php 文件中有这个 array( 'Application', 'Test' ), 'module_listener_options' => array ('config_glob_paths' => 数组('config/autoload/{,*.}{global,local}.php', ), 'module_paths' => 数组('./module', './vendor', ), ), );
        • 请拨打此网址。 localhost/test/test。将大写字符转换为小写。请更新,您将 htaccess 文件放在哪里。
        • 我对此进行了测试 localhost/Test/Test 并且:未找到 在此服务器上未找到请求的 URL /Test/Test。 ,我的 .htacces 文件在我的 Zend Framework 的公共文件夹中,
        【解决方案5】:

        1.你也应该检查application.config.php 并将您的模块名称添加到 RETURN 数组中。

        return array(    
            'modules' => array(
                'Application',
                'your_module',
                .....    
         ),
        

        2.如果没有。检查module.config.php中的路由数组

        【讨论】:

          【解决方案6】:

          我建议同时检查缓存配置文件的数据文件夹,在开发安装中缓存的配置文件也可能导致此问题。 删除数据/缓存中的文件并尝试。

          PS:如果您刚开始尝试使用 zend 站点上的博客模块,那么它是为初学者准备的,并且更新了新版本。

          https://framework.zend.com/manual/2.4/en/in-depth-guide/first-module.html

          【讨论】:

            猜你喜欢
            • 2015-07-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-21
            • 2017-09-25
            • 2019-01-16
            • 2018-01-05
            • 1970-01-01
            相关资源
            最近更新 更多