【问题标题】:Getting error in add Bundle in Vendor Folder in Symfony2在 Symfony2 的供应商文件夹中添加捆绑包时出错
【发布时间】:2016-07-06 11:03:29
【问题描述】:

Bundle Name:打开tok(我从github下载的)

我把那个文件夹放在 Symfony 的 Vendor 文件夹中(项目名称\vendor\OpenTok\OpenTok\所有文件和文件夹都放在这里)

AppKernel.php

<?php

 use Symfony\Component\HttpKernel\Kernel;
 use Symfony\Component\Config\Loader\LoaderInterface;

 class AppKernel extends Kernel
 {
     public function registerBundles()
     {
        $bundles = array(
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        new Symfony\Bundle\TwigBundle\TwigBundle(),
        new Symfony\Bundle\MonologBundle\MonologBundle(),
        new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
        new OpenTokBundle\OpenTokBundle(),
        new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new AdminBundle\AdminBundle(),
        new SiteBundle\SiteBundle(),
        new WSBundle\WSBundle(),
    );

    if (in_array($this->getEnvironment(), array('dev', 'test'), true)) {
        $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
        $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
        $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
        $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
    }

    return $bundles;
   }

  public function registerContainerConfiguration(LoaderInterface $loader)
  {
      $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
   }
}

app\autoload.php

 <?php

  use Doctrine\Common\Annotations\AnnotationRegistry;
  use Composer\Autoload\ClassLoader;
  /**
  * @var ClassLoader $loader
  */
  $loader = require __DIR__.'/../vendor/autoload.php';
  AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
  $loader->add('OpenTok' , __DIR__.'/..vendor/OpenTok');
  return $loader;

 ?>

Composer.json

  "require": {
        "php": ">=5.3.9",
        "symfony/symfony": "2.8.*",
        "doctrine/orm": "^2.4.8",
        "doctrine/doctrine-bundle": "~1.4",
        "symfony/swiftmailer-bundle": "~2.3",
        "symfony/monolog-bundle": "~2.4",
        "sensio/distribution-bundle": "~5.0",
        "sensio/framework-extra-bundle": "^3.0.2",
        "incenteev/composer-parameter-handler": "~2.0", 
       "opentok/opentok": "dev-master"
   },

上面的代码给了我错误:

致命错误:找不到类“OpenTokBundle\OpenTokBundle”

现在如何在我的所有其他文件中使用 opentok Bundle? 请帮助我。我是 symfony 的新手

【问题讨论】:

    标签: php symfony webrtc opentok tokbox


    【解决方案1】:

    您的问题是由于斜线造成的。
    它应该是$loader-&gt;add('OpenTok' =&gt; __DIR__.'/../vendor/OpenTok');,就像另一行一样(尽管我不确定实际路径是否正确)。

    话虽如此,您实际上应该使用 composer 下载和管理包,因为它具有仅通过下载存储库不会包含的依赖项。

    为此:

    1. 从自动加载中删除 $loader-&gt;add('OpenTok' =&gt; __DIR__.'/..vendor/OpenTok');
    2. "opentok/opentok": "^2.3.2" 或您要下载的版本添加到composer.json 中的“require”键中
    3. 运行composer update opentok/opentok

    包和类现在应该可以在您的应用程序中使用,当您需要更新版本时,您可以通过 composer 进行管理,而无需手动下载包(以及所有依赖项)。

    【讨论】:

    • 对不起先生,但我是 symfony 的新手,我无法理解第 2 点和第 3 点
    • 请查看我的编辑问题
    • 您的 composer.json 中已经有 opentok/opentok。你的机器上有作曲家吗?如果没有,打开终端,进入 Symfony 应用程序的根目录并安装它(参见getcomposer.org/download)。然后在终端运行php composer.phar update opentok/opentok。有关作曲家的更多信息,请参阅getcomposer.org/doc/01-basic-usage.md
    • 通过 composer update opentok/opentok 更新,但仍然出现错误 Fatal error: Class 'OpenTokBundle\OpenTokBundle' not found in C:\wamp\www\lemon_garden_opentok\app\AppKernel.php on line 16
    • 天哪。我刚刚看到了。 opentok 不是捆绑包,因此它没有 OpenTokBundle 类。您可以像往常一样使用应用程序中的类,如此处所述 - github.com/opentok/OpenTok-PHP-SDK#initializing
    【解决方案2】:

    我认为您应该使用 composer 管理所有内容,并且您需要安装库 opentok/opentok 和 symfony 的包 joos/open-tok-bundle 所以在你的 composer.json...

    "require": {
        "php": ">=5.3.9",
        "symfony/symfony": "2.8.*",
        "doctrine/orm": "^2.4.8",
        "doctrine/doctrine-bundle": "~1.4",
        "symfony/swiftmailer-bundle": "~2.3",
        "symfony/monolog-bundle": "~2.4",
        "sensio/distribution-bundle": "~5.0",
        "sensio/framework-extra-bundle": "^3.0.2",
        "incenteev/composer-parameter-handler": "~2.0",
        "joos/open-tok-bundle": "2.3.x-dev", 
        "opentok/opentok": "dev-master"
       },
    

    运行 composer 安装

    在你的 AppKernel.php

    <?php
    
     use Symfony\Component\HttpKernel\Kernel;
     use Symfony\Component\Config\Loader\LoaderInterface;
    
     class AppKernel extends Kernel
     {
         public function registerBundles()
         {
            $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Joos\OpenTokBundle\JoosOpenTokBundle(),
            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new AdminBundle\AdminBundle(),
            new SiteBundle\SiteBundle(),
            new WSBundle\WSBundle(),
        );
    
        if (in_array($this->getEnvironment(), array('dev', 'test'), true)) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
        }
    
        return $bundles;
       }
    
      public function registerContainerConfiguration(LoaderInterface $loader)
      {
          $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
       }
    }
    

    来自这个网址https://github.com/djoos/JoosOpenTokBundle

    【讨论】:

    • 你的意思是说,我通过composer安装opentok,然后我必须为joosopentok创建包?你能解释一下所有步骤吗?
    • 嘿,我根据您的反馈进行了更改,composer.json ,appkernel.php 和 Config.yml joos_open_tok: class: OpenTok key: "4578792" secret: "0ec08800000001f4711011db0e9e72f9ac93" 我使用它,public function indexAction() { $open_tok = $this-&gt;get('joos_open_tok'); var_dump($open_tok); return array("response"=&gt;"W"); } 给我错误:Fatal error: Class 'OpenTok' not foundAttempted to load class "OpenTok" from the global namespace. Did you forget a "use" statement for "OpenTok\OpenTok"?跨度>
    • 从你的 symfony 安装中执行这个命令的结果是什么:php app/console container:debug?服务 joos_open_tok 在列表中吗?
    • 您能否将答案标记为已接受,以便其他到达这里的人获得解决方案,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2014-05-20
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2017-08-12
    • 2012-09-05
    相关资源
    最近更新 更多