#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