在 Zend 中包含 PHP 库


Include PHP Library in Zend

我在/vendor/library文件夹中存储了一个第三方 php 库。现在我需要将其导入我的 Zend 应用程序并在控制器操作中使用它。

require_once ('/vendor/library/client.php');

这是对的吗?或者有其他方法可以解决这个问题?

使用 ZF 自动加载机,然后忘记包含/要求。

http://framework.zend.com/manual/1.12/en/zend.loader.autoloader.html

这意味着您的类名和文件名必须遵循它们的命名约定 - 这可能比它的价值更麻烦。

但是,如果您正在开发自己的库以在采埃孚内工作,那么这是一个好主意。

将准备作曲家的第三方库添加到 ZF2 实例

添加第三方库的正确方法是使用作曲家。

例如,如果您希望将 ZfcUser 添加到 Zend Framework 2 应用程序中,请使用以下命令:

composer require zf-commons/zfc-user:dev-master

这将从 github 下载代码,您只需要将模块名称添加到您的:/config/application.config.php .

将其他第三方库添加到 ZF2 实例

如果你的第三方库还没有准备好作曲家,你可以通过为它创建一个模块来将其添加到你的Zend Framework 2实例中。

步骤 1

/vendor/MyModule/Module.php

<?php
namespace MyModule;
use Zend'ModuleManager'Feature'AutoloaderProviderInterface;
class Module implements AutoloaderProviderInterface
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend'Loader'ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
            ),
            'Zend'Loader'StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }
}

这基本上提供了一种在名为 autoload_classmap.php 的文件中注册第三方代码的方法:

步骤 2

/vendor/MyModule/autoload_classmap.php

<?php
return array(
    'MyModule'VendorLibrary' => __DIR__ . '/src/MyModule/VendorLibrary.php',
);

步骤 3

您的第三方代码应位于:

/vendor/MyModule/src/MyModule/VendorLibrary.php,可以读到这样的东西:

<?php
namespace MyModule;
class VendorLibrary
{
    public function sayHi($name)
    {
        return "Hi there, $name!";
    }
    // your 3rd party code ...
}

步骤 4

将新模块添加到application.config.php

/config/application.config.php

<?php
return array(
    'modules' => array(
        // your other modules here ...
        'MyModule'
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            'config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            './module',
            './vendor',
        ),
    ),
);

用法

在控制器中,您现在使用供应商类,如下所示:

$vendor = new 'MyModule'VendorLibrary();
$hi = $vendor->sayHi('John');

虽然使用 require_once() 要容易得多,但不建议这样做,因为:

  1. 它不提供类层次结构和位置的可预测性和结构
  2. 您还需要注意包含路径,并确保require_once存在于需要第三方功能的所有控制器中
  3. 它不允许覆盖类(Magento风格)等。

希望这有帮助!