Задать вопрос
banderos120
@banderos120
Играю на балалайке

Как в Symfony2 получить путь к классу из namespace?

Собственно, суть вопроса в заголовке. Каким сервисом можно провернуть сие действо ?
-----
написал класс в тестах, который мне в БД строит схему и загружает фикстуры , предварительно очистив БД. Фикстуры расположены в разных бандлах. Вот чтоб из каждого бандла не писать путь руками, хочу вытягивать путь из Namespace, так как доктрине, для загрузки фикстур, нужен полный путь к папке, либо к классу. МНе нужно к классу.
  • Вопрос задан
  • 2423 просмотра
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
banderos120
@banderos120 Автор вопроса
Играю на балалайке
Вот класс загрузки фикстур. Может кому пригодится.
<?php


namespace Retouch\AppBundle\Tests;


use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
use Symfony\Bridge\Doctrine\DataFixtures\ContainerAwareLoader;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\DependencyInjection\Container;

/**
 * Class FixturesLoader
 */
class FixturesLoader
{
    /**
     * @var Application
     */
    protected $console;

    /**
     * @var Container
     */
    protected $container;

    /**
     * @param Container $container
     */
    public function __construct(Container $container)
    {
        $this->container = $container;
        $this->console = new Application($this->container->get('kernel'));
        $this->console->setAutoExit(false);
    }

    /**
     * @param array $fixtures
     */
    public function loadFixture(array $fixtures = array())
    {
        $this->runConsole('doctrine:schema:drop --force');
        $this->runConsole('doctrine:schema:create');

        $loader = new ContainerAwareLoader($this->container);

        foreach($fixtures as $fixture){
            if($fixture instanceof FixtureInterface){
                $loader->addFixture($fixture);
            }
        }

        $fixtures = $loader->getFixtures();

        if(!$fixtures){
            return;
        }

        $doctrine = $this->container->get('doctrine');
        $em = $doctrine->getManager();

        $purger = new ORMPurger($em);

        $purger->setPurgeMode(ORMPurger::PURGE_MODE_DELETE);

        $executor = new ORMExecutor($em, $purger);
        $executor->execute($fixtures, false);

    }

    /**
     * @param $command
     * @return int
     * @throws \Exception
     */
    protected function runConsole($command)
    {
        $command .= ' --env=test --quiet';

        $input = new StringInput($command);

        return $this->console->run($input);
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@shoomyst
dumb
Я всё равно ничего не понял, но видимо надо смотреть в сторону kernel->getBundles() + bundle->getPath()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы