3

我已经广泛搜索了如何集成推进和 Zend Framework 2,但是我还没有提出解决方案。

这是我到目前为止所拥有的。

安装 ZF2 骨架目录 从 ZF 站点插入样本专辑表数据

我的文件夹结构看起来像这样

--Vendor
----Propel
------album
--------autoload_classmap.php
--------models
----------map
----------om
----------Album.php
----------AlbumPeer.php
----------AlbumQuery.php
------config
--------module.config.php
------Module.php
------autoload_classmap.php

专辑/autoload_classmap.php 看起来像这样

//vendor/Propel/album/autoload_classmap.php
<?php
// Generated by ZF2's ./bin/classmap_generator.php
return array(
    'AlbumTableMap'  => __DIR__ . '/models/map/AlbumTableMap.php',
    'BaseAlbumPeer'  => __DIR__ . '/models/om/BaseAlbumPeer.php',
    'BaseAlbumQuery' => __DIR__ . '/models/om/BaseAlbumQuery.php',
    'BaseAlbum'      => __DIR__ . '/models/om/BaseAlbum.php',
    'Album'          => __DIR__ . '/models/Album.php',
    'AlbumPeer'      => __DIR__ . '/models/AlbumPeer.php',
    'AlbumQuery'     => __DIR__ . '/models/AlbumQuery.php',
);

这是module.config.php

//vendor/Propel/config/module.config.php
<?php
return array();

这是 Propel/autoload_classmap.php

//vendor/Propel/autoload_classmap.php

<?php
// Generated by ZF2's ./bin/classmap_generator.php
return array(
    'Propel'                                              => __DIR__ . '/runtime/lib/Propel.php',
);

最后是 Model.php 文件

    //vendor/Propel/Module.php
<?php

namespace Propel;

class Module
{

    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
                __DIR__ . '/album/autoload_classmap.php'
            )
        );
    }

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

为了简单起见,我将以下代码放入我的控制器中。

//module/Application/src/Application/Controller/IndexController.php
namespace Application\Controller;

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

class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        $q = new \Propel\Album();
        $q->setArtist('The Who');
        $q->setTitle('Tommy');
        $q->save();

        return new ViewModel();
    }
}

我得到的错误是

 Class 'Propel\\Album' not found

我用来达到这一点的来源是

https://groups.google.com/forum/?fromgroups=#!searchin/propel-users/zend/propel-users/lsHs-jjxp68/LDrQjzik6gAJ https://docs.google.com/viewer?a=v&pid= forums&srcid=MDU2NDIxODQyNDc0MDMyNjQ3NzUBMDY3ODcxMTYzMzg0MDA4OTU0MzgBeFpDZUM1WTZqMThKATQBAXYy 将供应商特定模块添加到 Zend Framework 2.0

4

2 回答 2

2

如果您没有在 XML 模式中设置名称空间,那么您的类应该可以在根名称空间中访问,例如 \Album。如果你想拥有一些其他的命名空间,你应该在你的 XML 模式的数据库标签中定义它。而且你不应该使用 Propel 命名空间,因为它是为 Propel 本身保留的。您生成的类对于您的项目的命名空间应该很长。

于 2014-11-07T21:15:49.303 回答
0

\Propel\Album找不到,因为类映射指定Album为类名。

我猜你是否添加了以下行:namespace Propel;类映射生成器将在每个与 Propel 相关的文件中放置正确的类名。当然,您需要更新受影响代码中的类名。

于 2012-10-28T15:17:47.343 回答