SyliusBundleTaxonomiesBundleDoctrineORMTaxonRepository::getTaxonsAsList()

#php #symfony #sylius

#php #symfony #sylius

Вопрос:

Я загрузил и установил sylustaxonomiesbundle, и когда я хочу создать таксон (связанный с таксономией), я получаю следующую проблему:

Уловимая неустранимая ошибка: аргумент 1, переданный SyliusBundleTaxonomiesBundleDoctrineORMTaxonRepository::getTaxonsAsList() должен реализовывать интерфейс SyliusBundleTaxonomiesBundleModelTaxonomyInterface, заданный null, вызывается в /home/jeremy/web/vendor/sylius/taxonomies-bundle/Sylius/Bundle/TaxonomiesBundle/Form/Type/TaxonChoiceType.php в строке 70 и определяется в /home/jeremy/web/vendor/sylius/taxonomies-bundle/Sylius/Bundle/TaxonomiesBundle/Doctrine/ORM/TaxonRepository.php строка 25

проблема на этом уровне : https://github.com/pjedrzejewski/SyliusTaxonomiesBundle/blob/master/Form/Type/TaxonChoiceType.php

     /**
 * {@inheritdoc}
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $repository = $this->taxonRepository;
    $choiceList = function (Options $options) use ($repository) {
        $taxons = $repository->getTaxonsAsList($options['taxonomy']);

        if (null !== $options['filter']) {
            $taxons = array_filter($taxons, $options['filter']);
        }

        return new ObjectChoiceList($taxons);
    };

    $resolver
        ->setDefaults(array(
            'choice_list' => $choiceList
        ))
        ->setRequired(array(
            'taxonomy',
            'filter'
        ))
        ->setAllowedTypes(array(
            'taxonomy' => array('SyliusBundleTaxonomiesBundleModelTaxonomyInterface'),
            'filter' => array('Closure', 'null')
        ))
    ;
}
  

и метод getTaxonsAsList находится здесь : https://github.com/pjedrzejewski/SyliusTaxonomiesBundle/blob/master/Doctrine/ORM/TaxonomyRepository.php

 class TaxonRepository extends EntityRepository implements TaxonRepositoryInterface
{
public function getTaxonsAsList(TaxonomyInterface $taxonomy)
{
    return $this->getQueryBuilder()
        ->where('o.taxonomy = :taxonomy')
        ->andWhere('o.parent IS NOT NULL')
        ->setParameter('taxonomy', $taxonomy)
        ->orderBy('o.left')
        ->getQuery()
        ->getResult()
    ;
}
  

}

Не могли бы вы мне помочь, пожалуйста, большое вам спасибо

Ответ №1:

Я использую автономный пакет. и у меня была та же проблема.

Я решил свою проблему, добавив «$this-> setRoot (новый таксон ())» в конструктор моего класса таксономии.

Я переопределяю модель таксономии и таксон, и это работает для меня.

 use DoctrineORMMapping as ORM;

use SyliusComponentTaxonomyModelTaxonomy as BaseTaxonomy;

use SynCoreBundleEntityTaxon;
/**
 * Class Taxonomy.
 * 
 * @ORMTable(name="syn_taxonomy")
 * @ORMEntity
 */
class Taxonomy extends BaseTaxonomy
{
    /**
     * {@inheritdoc}
     */
    public function __construct()
    {
        $this->setRoot(new Taxon());
    }
}
  

Класс Таксон

 use DoctrineORMMapping as ORM;

use SyliusComponentTaxonomyModelTaxon as BaseTaxon;

/**
 * Class Taxon.
 * 
 * @ORMTable(name="syn_taxon")
 * @ORMEntity
 */
class Taxon extends BaseTaxon
{
}
  

Ответ №2:

У меня была точно такая же проблема.

Я также переопределил модели из TaxonomyBundle. А также поместил метод setRoot в конструктор из Таксономии. На самом деле это исправило ошибку, но не ту ошибку, которая описана сверху.

Проблема в том, что вместо SyliusTaxonController загружается syliusResourceController . Вы можете проверить это, введя php app/console container:debug | grep taxon в консоль

вы можете изменить контроллер следующим образом:

 sylius_taxonomy:
    driver: doctrine/orm
    classes:
        taxonomy:
            model: AppCoreBundleModelTaxonomy
        taxon:
            controller: SyliusBundleTaxonomyBundleControllerTaxonController
            model: AppCoreBundleModelTaxon