Получение ошибки при добавлении Bundle в папку Vendor в Symfony2

Название пакета: открытый ток (я скачал его с github)

я положил эту папку в папку поставщика Symfony(имя проекта \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

2 ответа

Решение

Ваша проблема связана с косой чертой.
Так должно быть $loader->add('OpenTok' => __DIR__.'/../vendor/OpenTok'); как и в другой строке (хотя я не уверен, что фактический путь будет правильным).

Это значит, что вы должны загрузить пакет и управлять им, используя composer, поскольку у него есть зависимости, которые не будут включены при загрузке репозитория.

Сделать это:

  1. Удалить $loader->add('OpenTok' => __DIR__.'/..vendor/OpenTok'); строка из вашей автозагрузки
  2. добавлять "opentok/opentok": "^2.3.2" или версию, которую вы хотите загрузить на свой ключ "require" в вашем composer.json
  3. Бежать composer update opentok/opentok,

Пакет и классы теперь должны быть доступны в вашем приложении, и, когда вам требуется более новая версия, вы можете управлять всем этим через composer, а не загружать пакет вручную (вместе со всеми зависимостями).

Я думаю, что вы должны управлять всем, используя 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"
   },

Запустите установку композитора

И в вашем 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');
   }
}

С этого URL https://github.com/djoos/JoosOpenTokBundle

Другие вопросы по тегам