庫Shanty_Mongo
是一個「舊」下劃線分隔的庫,不使用名稱空間。在ZF2中,風格與PSR-0標準相同,但具有命名空間(因此Shanty_Mongo
將爲Shanty\Mongo
)。但是,例如,您可以使用類圖加載這些舊式樣。然後你可以在你的ZF2項目中使用下劃線分隔的類。
我建議你爲這個庫創建一個模塊,並把該模塊放在./vendor
(「提供第三方功能的模塊」)。在這個模塊中,可以創建以下目錄結構(我假設模塊的名稱是ShantyMongo):
./vendor/ShantyMongo/
library/
Module.php
autoload_classmap.php
autoload_function.php
autoload_register.php
圖書館是一個子模塊的ShantyMongo git倉庫。文件autoload_classmap.php
是由ZF2存儲庫的bin
目錄內的php腳本classmap_generator.php
創建的類映射。然後autoload_function.php可以像這樣簡單的東西:
<?php
return function ($class) {
static $map;
if (!$map) {
$map = include __DIR__ . '/autoload_classmap.php';
}
if (!isset($map[$class])) {
return false;
}
return include $map[$class];
};
而且autoload_register.php是這樣的:
<?php
spl_autoload_register(include __DIR__ . '/autoload_function.php');
要讓ZF2應用程序知道你有這個模塊,您需要填寫module.php與ShantyMongo\Module
類。這樣的事情應該是足夠了:
<?php
namespace ShantyMongo;
use Zend\Module\Consumer\AutoloaderProvider;
class Module implements AutoloaderProvider
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
)
);
}
}
如果添加「ShantyMongo」在application.config.php
你的模塊陣列現在已經設置了自動加載機的內部ZF2這個第三方庫。然後,您可以如下使用您的模型:
<?php
namespace Dummy\Model;
class Dummy extends Shanty_Mongo_Document {
public function setConnections ($connections) {
Shanty_Mongo::addConnections($connections);
}
}
因爲ShantyMongo不使用名稱空間,所以您不再使用該語句。
嘗試'使用Shanty \ Mongo \ Document作爲文檔',然後'class Dummy extends Document'。我對這些命名空間並不太堅定,但是如果我理解正確,它應該像那樣工作 – Sam
不幸的是,它不起作用。實際上,Shanty_Mongo遵循Zend爲它的庫強制執行的目錄命名轉換,但我想它不起作用,因爲它不支持命名空間。我試圖弄清楚如何使它工作(http://packages.zendframework.com/docs/latest/manual/en/zend.loader.html#zend.loader.load) – mobius