编辑:
好的,您没有提到您正在使用 PEAR 命名/命名空间。在这种情况下,它的工作方式会有所不同。
首先,您需要调整框架的类命名。那些需要一个Framework
段,所以:
Controller_Front
应该
Framework_Controller_Front
这为您提供了控制器的唯一 ns。
然后使用加载器,您将注册一个前缀,例如:
$loader->registerPrefix('Framework', 'absolute/path/to/lib');
从来没有使用过带有 PEAR 命名的 ClassLoader,我不确定您是否需要_
在前缀上留下尾随,但您应该能够通过反复试验来解决这个问题。此外,我不确定您是否会将路径指向“absolute/path/to/lib”或“absolute/path/to/lib/Framework”——再次反复试验应该指出这一点:-)
好的,不确定你哪里出错了,但让我们这样做。
让我们创建一个/lib
名为autoload.php
内容的文件:
// require/use statements for the Symfony ClassLoader Component
$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
'Framework' => __DIR__
));
$loader->register();
return $loader;
至此,类加载器就设置好了。然后在每个站点的 index.php (或任何你用来做你的引导程序的东西:
// configure the path to the framework from SITE/public and require the autoload.php
$frameworkDir = realpath(__DIR__ . '/../../lib');
$siteDir = realpath(__DIR__ . '/../'); // whatever gives us site1
$loader = require_once($frameworkDir . '/autoload.php');
// now lets start mapping our application specific namespaces
$loader->registerNamespace('App1', $siteDir . '/App/App1');
$loader->registerNamespace('App2', $siteDir . '/App/App2');
// then the rest of your bootstrapping and FC initialization
你可能想试试Symfony Components ClassLoader——这就是我通常使用的。只要您使用绝对路径注册您的命名空间,这并不重要。
$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
'Framework' => __DIR__ . '/lib',
'AppOne' => $somevarHoldingTheABSPrefixToTheAppOneCode . '/lib',
'AppTwo' => $somevarHoldingTheABSPrefixToTheAppTwoCode . '/lib',
'AppTwo\\SomeVendor' => $somevarHoldingTheABSPrefixToTheAppTwoCode . '/vendor/somevendor/lib'
));
$loader->register();