0

我下载并安装了 SyliusTaxonomiesBundle,当我想创建一个分类单元(链接到一个分类)时,我遇到了以下问题:

可捕获的致命错误:参数 1 传递给 Sylius\Bundle\TaxonomiesBundle\Doctrine\ORM\TaxonRepository::getTaxonsAsList() 必须实现接口 Sylius\Bundle\TaxonomiesBundle\Model\TaxonomyInterface,给定 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('Sylius\Bundle\TaxonomiesBundle\Model\TaxonomyInterface'),
            '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()
    ;
}

}

你能帮帮我吗,非常感谢

4

2 回答 2

0

我使用独立包。我也有同样的问题。

我通过在我的分类类的构造函数中添加“$this->setRoot(new Taxon())”解决了我的问题。

我覆盖了分类模型和分类单元,它对我有用。

use Doctrine\ORM\Mapping as ORM;

use Sylius\Component\Taxonomy\Model\Taxonomy as BaseTaxonomy;

use Syn\CoreBundle\Entity\Taxon;
/**
 * Class Taxonomy.
 * 
 * @ORM\Table(name="syn_taxonomy")
 * @ORM\Entity
 */
class Taxonomy extends BaseTaxonomy
{
    /**
     * {@inheritdoc}
     */
    public function __construct()
    {
        $this->setRoot(new Taxon());
    }
}

分类单元

use Doctrine\ORM\Mapping as ORM;

use Sylius\Component\Taxonomy\Model\Taxon as BaseTaxon;

/**
 * Class Taxon.
 * 
 * @ORM\Table(name="syn_taxon")
 * @ORM\Entity
 */
class Taxon extends BaseTaxon
{
}
于 2014-08-07T16:13:34.337 回答
0

我有完全相同的问题。

我也确实覆盖了 TaxonomyBundle 中的模型。并且还将 setRoot 方法放置在分类法的构造函数中。它实际上确实修复了一个错误,但没有修复上面描述的错误。

问题是加载了 syliusResourceController 而不是 SyliusTaxonController。您可以通过php app/console container:debug | grep taxon在控制台中输入来检查

您可以像这样更改控制器:

sylius_taxonomy:
    driver: doctrine/orm
    classes:
        taxonomy:
            model: App\CoreBundle\Model\Taxonomy
        taxon:
            controller: Sylius\Bundle\TaxonomyBundle\Controller\TaxonController
            model: App\CoreBundle\Model\Taxon
于 2014-09-09T11:40:43.160 回答