Zend Framework 2相册教程404发生错误路由MAMP OSX无法匹配请求的URL

时间:2013-10-18 00:14:53

标签: macos zend-framework zend-framework2 mamp

刚刚在IRC频道ZFTalk上发布了这个,

希望我可以使用MAMP获得ZF2,ZF2专辑教程,OSX的一些帮助。骨架框架,主页正在工作。

问题:完成部分后:8.5列出相册,用一些代码填写模块/专辑/视图/专辑/专辑/ index.phtml,然后他们要求您在http://zf2-tutorial.localhost/album上预览页面。

我收到404,请求的网址无法与路由匹配。

我前往谷歌寻求建议。找到了一个GIT存储库,其中包含了Tutorial的“完全工作模型”,因此我将其与我的代码进行比较。如果我将其设置为另一个主机,我会得到相同的404路由消息。

在仔细研究手册之后,如果您的httpd.conf / AllowOverride未设置为FileInfo,它在开始时明确指出您将无法查看除开始/主页之外的任何内容。

决定扫描整个机器上的httpd.conf文件,以防万一MAMP在启动服务器时没有使用我改变的路径。

所以发现3,改变了所有这些(虽然我们找到了3,我相信正确的路由是/ private / etc)我的问题仍然存在于我从教程编写的代码中,以及GIT代码'工作模式'。

有没有人遇到过这个问题?在stackoverflow Zend Framework 2 .htaccess mamp pro上发现了这与我的问题有相似之处但尚未解决。这里的任何人都可以帮助我吗?

其他路由涉及:检查代码中的拼写错误,检查application.config.php是否设置了路由。请指教? :)

Module.php

<?php
namespace Album;

use Album\Model\Album;
use Album\Model\AlbumTable;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;

class Module
{
    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';
    }

    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);
                },
            ),
        );
    }
}

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',
        ),
    ),
);

3 个答案:

答案 0 :(得分:0)

在此thread的帮助下解决了此错误。

我认为,除非有任何其他错误配置,否则此错误的来源 - 至少对我来说 - 是注册相册模块的位置。

SKELETON应用程序附带应用程序模块。这是两个不同的东西,他们有自己的config文件夹:

config                      // SKELETON Application config
module/Application/config   // Application MODULE config

模块需要在骨架提供的Skeleton Application配置文件中注册,即config/application.config.php NOT ,方法是在Application Module配置中创建application.config.php文件,例如module/Application/config/application.config.php

答案 1 :(得分:0)

你可以解决的是通过配置(httpd.conf)中的apache设置来改变 &#34; AllowOverride无&#34; to&#34; AllowOverride All&#34;。 此类设置允许您通过.htaccess覆盖配置值

答案 2 :(得分:-1)

请试试这个

如果您看到标准的Apache 404错误,则需要在继续之前修复.htaccess用法。如果您正在使用带有URL重写模块的IIS,请导入以下内容:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php [NC,L]

您现在拥有一个有效的骨架应用程序,我们可以开始为我们的应用程序添加细节。如果你工作得很好,请告诉我。