0

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

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

这个对吗 ?还是有其他方法来处理这个?

4

2 回答 2

2

将 Composer 就绪的第 3 方库添加到 ZF2 实例

添加 3rd 方库的正确方法是使用 Composer。

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

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

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

将其他 3rd 方库添加到 ZF2 实例

如果您的 3rd 方库未准备好 Composer,您可以通过为其创建模块将其添加到 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__,
                ),
            ),
        );
    }
}

这基本上提供了一种方法,您可以在名为的文件中注册您的 3rd 方代码autoload_classmap.php

第2步

/vendor/MyModule/autoload_classmap.php

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

第 3 步

您的第 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 存在于所有需要 3rd 方功能的控制器中
  3. 它不允许覆盖类(Magento 风格)等。

希望这可以帮助!

于 2013-09-06T11:27:52.677 回答
2

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

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

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

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

于 2013-09-06T06:54:25.223 回答