3

私はpropelとZendFramework2を統合する方法を広範囲にわたって検索しましたが、まだ解決策を思い付くことができませんでした。

これが私がこれまでに持っているものです。

インストールされた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

album/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 ベンダー固有のモジュールをZendFramework2.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 に答える