0

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

希望我能在使用 MAMP 的 ZF2、ZF2 专辑教程、OSX 上获得一些帮助。骨架框架,主页正在运行。

问题:完成第 8.5 节列出专辑后,您在模块/Album/view/album/album/index.phtml 中填写了一些代码,然后他们要求您在http://zf2-tutorial.localhost/上预览页面专辑

我收到 404,请求的 URL 无法通过路由匹配。

我前往谷歌寻求建议。找到了一个 GIT 存储库,其中包含教程的“完全工作模型”,所以我得到了这个来比较我的代码。如果我将它设置为另一台主机,我会收到相同的 404 路由消息。

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

决定扫描整个机器以查找名为 httpd.conf 的文件,以防万一我更改的路径在启动服务器时未被 MAMP 使用。

所以找到了3个,都改了(虽然找到了3个,我相信正确的路由是/private/etc)我的问题仍然存在于我从教程中编写的代码中,以及'working模型'。

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

采取的其他路线包括:检查代码中的拼写错误,检查 application.config.php 是否设置了路线。请指教?:)

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

模块.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',
        ),
    ),
);
4

3 回答 3

0

在这个线程的帮助下解决了这个错误。

我认为,除非有任何其他错误配置,否则此错误的根源——至少对我而言——是在哪里注册 Album 模块。

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

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

该模块需要在骨架提供的骨架应用程序配置文件中注册,config/application.config.php不是application.config.php通过在应用程序模块配置中创建文件,例如module/Application/config/application.config.php.

于 2015-02-08T21:20:53.957 回答
0

您可以通过在 (httpd.conf) 中配置 apache 设置来解决,将“AllowOverride None”更改为“AllowOverride All”。这样的设置允许您通过 .htaccess 覆盖配置值

于 2015-07-15T12:58:55.890 回答
-1

请试试这个

如果您看到标准的 Apache 404 错误,那么您需要.htaccess在继续之前修复使用情况。如果您将 IIS 与 URL 重写模块一起使用,请导入以下内容:

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

您现在有一个工作框架应用程序,我们可以开始为我们的应用程序添加细节。请让我知道它是否对您有用。

于 2013-11-26T05:57:57.757 回答