zend framework2教程:致命错误:Class' Album \ Model \ AlbumTable'在C:\ wamp \ www \ quickstart \ module \ Album \ Module.php中找不到

时间:2015-03-30 18:17:04

标签: zend-framework zend-framework2

注意:开发在Netabean IDE中完成,托管在WAMPP上是本地的,我为虚拟主机配置了它。正在使用Composer。

我已经回顾了与此相似的其他问题,我没有同样的问题。请注意这是我第一次使用Zend框架。谢谢。

使用回声帮助我找到了当我在Module.php中创建AlbumTable时失败。

这是Stacktrace:

  

[2015年3月30日20:29:11欧洲/巴黎] PHP致命错误:类   '相册\模型\ AlbumTable'找不到   第43行的C:\ wamp \ www \ quickstart \ module \ Album \ Module.php

     

[2015年3月30日20:29:11欧洲/巴黎] PHP Stack跟踪:

     

[2015年3月30日20:29:11欧洲/巴黎] PHP 1. {main}()   C:\瓦帕\ WWW \快速启动\公共\的index.php:0

     

[2015年3月30日20:29:11欧洲/巴黎] PHP 2。   Zend \ Mvc \ Application-> run()C:\ wamp \ www \ quickstart \ public \ index.php:26

     

[2015年3月30日20:29:11欧洲/巴黎] PHP 3。   的Zend \ eventmanager进行\ EventManager->触发器()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的mvc \ Application.php:313

     

[2015年3月30日20:29:11欧洲/巴黎] PHP 4。   的Zend \ eventmanager进行\ EventManager-> triggerListeners()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\ eventmanager进行\ EventManager.php:207

     

[2015年3月30日20:29:11欧洲/巴黎] PHP 5。   call_user_func:{C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\ eventmanager进行\ EventManager.php:468}()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\ eventmanager进行\ EventManager.php:468

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 6。   的Zend \的mvc \ DispatchListener-> onDispatch()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\ eventmanager进行\ EventManager.php:468

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 7。   的Zend \的mvc \控制器\ AbstractController->调度()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的mvc \ DispatchListener.php:113

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 8。   的Zend \ eventmanager进行\ EventManager->触发器()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的mvc \控制器\ AbstractController.php:116

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 9。   的Zend \ eventmanager进行\ EventManager-> triggerListeners()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\ eventmanager进行\ EventManager.php:207

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 10。   call_user_func:{C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\ eventmanager进行\ EventManager.php:468}()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\ eventmanager进行\ EventManager.php:468

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 11。   的Zend \的mvc \控制器\ AbstractActionController-> onDispatch()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\ eventmanager进行\ EventManager.php:468

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 12。   专辑\控制器\ AlbumController->的indexAction()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的mvc \控制器\ AbstractActionController.php:83

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 13。   专辑\控制器\ AlbumController-> getAlbumTable()   C:\瓦帕\ WWW \快速启动\模块\相册\ SRC \相册\控制器\ AlbumController.php:26

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 14。   的Zend \的ServiceManager \ ServiceManager->得到()   C:\瓦帕\ WWW \快速启动\模块\相册\ SRC \相册\控制器\ AlbumController.php:51

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 15。   的Zend \的ServiceManager \ ServiceManager->创建()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的ServiceManager \ ServiceManager.php:525

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 16。   的Zend \的ServiceManager \ ServiceManager-> doCreate()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的ServiceManager \ ServiceManager.php:593

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 17。   的Zend \的ServiceManager \ ServiceManager-> createFromFactory()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的ServiceManager \ ServiceManager.php:633

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 18。   的Zend \的ServiceManager \ ServiceManager-> createServiceViaCallback()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的ServiceManager \ ServiceManager.php:1057

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 19。   call_user_func:{C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的ServiceManager \ ServiceManager.php:923}()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的ServiceManager \ ServiceManager.php:923

     

[2015年3月30日20:29:12欧洲/巴黎] PHP 20。   专辑\模块 - >专辑{闭合}()   C:\瓦帕\ WWW \快速启动\厂商\ zendframework \ zendframework \库\ Zend的\的ServiceManager \ ServiceManager.php:923

这是我的专辑\ src \ Album \ Controller \ AlbumController.php

namespace Album\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class AlbumController extends AbstractActionController
{
protected $albumTable;

public function indexAction()
{
     return new ViewModel(array(
         'albums' => $this->getAlbumTable()->fetchAll(),
     ));
}

public function getAlbumTable()
{
    echo "Made it";
    if (!$this->albumTable) {
        $sm = $this->getServiceLocator();
        echo "Made it";
        if($sm->has('Album\Model\AlbumTable'))
        {
            echo "FOUND Album\Model\AlbumTable";
            $this->albumTable = $sm->get('Album\Model\AlbumTable');
        }else{
           echo "Could not find Album\Model\AlbumTable";
        }
    }
    echo "Made it";
    return $this->albumTable;
}
}

这是Album \ Module.php

namespace Album;

use Album\Model\Album;
use Album\Model\AlbumTable;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;

use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;

class Module implements AutoloaderProviderInterface, ConfigProviderInterface
{
    public function getAutoloaderConfig()
    {
    }

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

    public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'Album\Model\AlbumTable' =>  function($sm) {
                   // echo "inside ftn Album\Model\AlbumTable";
                    $tableGateway = $sm->get('AlbumTableGateway');
                    echo " Gate way GOOD";
                    $table = new AlbumTable($tableGateway);
                    echo "Table good";
                    return $table;
                },
                'AlbumTableGateway' => function ($sm) {
                   // echo "inside ftn AlbumTableGateway";
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                  //  echo "adapater good";
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype(new Album());
                    return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
                },
            ),
        );
     }

}

这是Album \ src \ Album \ Model \ AlbumTable.php

namespace Album\Model;

use Zend\Db\TableGateway\TableGateway;
//use Zend\Db\ResultSet\ResultSet;

class AlbumTable
{
    protected $tableGateway;

    public function __construct(TableGateway $tableGateway)
    {
        echo "inside construct of AlbumTable";
        $this->tableGateway = $tableGateway;
    }

我没有进入AlbumTable。我已经将它包含在Module.php中,并使用了类名和文件拼写正确。除非我的眼睛让我失望,否则我希望如此。

有谁能告诉我为什么会收到此错误?我从回声中输出的内容如下:

制作它 做好了 FOUND Album \ Model \ AlbumTable 门道好

3 个答案:

答案 0 :(得分:1)

在使用深入教程搜索我自己问题的答案时,我会在 Album \ Module.php 中看到您编写以下内容的位置:

     return include __DIR__ . '/config/module.config.php';

当我使用这些斜杠,并重新加载索引页面时,我得到一个空白页面。如果我更改斜杠以匹配教程中指示的内容,请执行以下操作:

useref

然后索引页面按预期加载。您可能有其他错误,但我可以测试并确认。

答案 1 :(得分:0)

找不到。如果您没有使用composer(或其他一些自动加载方法),则需要在getAutoloaderConfig中返回正确的配置,以将模块的命名空间添加到默认的Zend\Loader\StandardAutoloader

public function getAutoloaderConfig()
{
    return [
        'Zend\Loader\StandardAutoloader' => [
            'namespaces' => [
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
            ],
        ],
    ];
}

答案 2 :(得分:0)

我遇到了同样的问题。在我的情况下,这是因为我没有在Module / Album / Module.php中粘贴以下行:

use Album\Model\Album;

因为教程中没有以黄色突出显示。

你需要那条线!