Zend Framework 2 - 如何使用外部库

3
我想将我的自定义类“Authentication.php”添加到我的项目中,但我不知道该怎么做?
我已经阅读了很多关于外部库的教程,但没有一个有效。
ZendFramework/module/Firewall/Module.php
class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        $eventManager        = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                    'MyNamespace' => __DIR__ . '/../../vendor/MyNamespace/lib/MyNamespace',
                ),
            ),
        );
    }
}

ZendFramework/vendor/MyNamespace/lib/MyNamespace/Authentication.php

可能是一个与身份验证相关的 PHP 文件路径。

<?php

class Authentication {

public function test()
{
     die('Works fine');
}


}

?>

我该如何在我的控制器中调用外部库?
非常感谢您!

如果将您的类放在module/ModuleName/src/ModuleName/中,则您的类必须有“namespace ModuleName;”指令才能使用默认自动加载程序。调用new \ModuleName\Authentication(); 将其可用。 - SmasherHell
我认为你忘记在 Authentication.php 中添加命名空间部分了。 - Mohammad Mehdi Habibi
谢谢Mohamad,问题也是命名空间!再次感谢你! - Dimitri
3个回答

8

I try like this:

1)

//module/Application/Module.php
public function getAutoloaderConfig()
{
    return array(
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                'Mynamespace' => __DIR__ . '/../../vendor/Mynamespace',
            ),
        ),
    );
}

2)

//vendor/Mynamespace/MyClass.php
namespace Mynamespace;
class MyClass
{
    //...
}

3) 举个例子,在我的控制器中我会这样使用它:

use Zend\Mvc\Controller\AbstractActionController;
use Mynamespace\MyClass;
class AdminController extends AbstractActionController
{
    public function indexAction()
    {
        $myclass = new MyClass();
    }
}

我按照描述做了同样的事情,但是我遇到了错误,我的文件夹结构如下:aws/aws-sdk-php/src/Aws,所以我在命名空间中写入了路径: public function getAutoloaderConfig() { return array( 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( NAMESPACE => DIR . '/src/' . NAMESPACE, 'Aws' => DIR . '/../../vendor/aws/aws-sdk-php/src/Aws', ), ), ); } - user3911183

0
针对这种库,只需在您的 application.config.php 中输入即可。
<?php
return array(
    'modules' => array(
        'ZendDeveloperTools',
        'Application',
        'YourLibrary' // <-- here
        ...

0
在 composer.json 文件中添加以下库:
 "require": {
            "php": ">=5.3.3",
            "zendframework/zendframework": ">2.2.0rc1",
            "doctrine/doctrine-orm-module": "0.7.*",
            "zendframework/zend-developer-tools": "dev-master",
            "twig/twig": ">=1.12.3",

        }

然后在你的 application.config.php 文件中的模块数组下面

'modules' => array(
        'Application',
            'ZendDeveloperTools',
            'ZfcTwig',
            'DoctrineModule',
            'DoctrineORMModule','yourdir',

    ),

那就做类似的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接