我在/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() 要容易得多,但不建议这样做,因为:
- 它不提供类层次结构和位置的可预测性和结构
- 您还需要注意包含路径,并确保require_once存在于需要第三方功能的所有控制器中
- 它不允许覆盖类(Magento风格)等。
希望这有帮助!