0

I have stored a third party php library in /vendor/library folder. Now i need to import it to my Zend app and use it inside controller action.

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

Is this correct ? Or there is other way to to handle this ?

4

2 に答える 2

2

Composer 対応のサードパーティ ライブラリを ZF2 インスタンスに追加する

サードパーティ ライブラリを追加する正しい方法は、Composer を使用することです。

例)ZfcUserを Zend Framework 2 アプリケーションに追加する場合は、次のコマンドを使用します。

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

これにより、github からコードがダウンロードされ、モジュール名を your: に追加するだけで済みます/config/application.config.php

他のサードパーティ ライブラリを ZF2 インスタンスに追加する

サード パーティのライブラリが 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__,
                ),
            ),
        );
    }
}

これが基本的に提供するのは、サードパーティのコードを次のファイルに登録する方法です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スタイル)などのオーバーライドは許可されていません。

お役に立てれば!

于 2013-09-06T11:27:52.677 に答える