【问题标题】:Zend Framework 2 - How to use an external libraryZend Framework 2 - 如何使用外部库
【发布时间】:2013-12-29 15:22:25
【问题描述】:

我想将我的自定义类“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

class Authentication {

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


}

?>

如何在我的控制器中调用我的外部库。

非常感谢!

【问题讨论】:

  • 如果你把你的类放在module/ModuleName/src/ModuleName/中,你的类必须有'namespace ModuleName;'使用默认自动加载器的指令。它将可以调用 new \ModuleName\Authentication();
  • 我想你忘了在Authentication.php中添加命名空间部分
  • 感谢 Mohamad,问题也出在命名空间上!再次感谢您!

标签: php zend-framework zend-framework2


【解决方案1】:

对于这种库,只需输入您的 application.config.php

<?php
return array(
    'modules' => array(
        'ZendDeveloperTools',
        'Application',
        'YourLibrary' // <-- here
        ...

【讨论】:

    【解决方案2】:

    我尝试这样:

    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,所以我在命名空间中写了路径:公共函数getAutoloaderConfig() { return array( 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( NAMESPACE => DIR . '/src/' . NAMESPACE, 'Aws' => DIR . '/../../vendor/aws/aws-sdk-php/src/Aws', ), ), ); }
    【解决方案3】:

    在 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',
    
        ),
    

    所以做一些类似的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多