0

私は、Variant モデルを拡張して、その上にフィールドを追加して、こちらのガイドに従って製品で使用できるようにしようとしています。

製品を作成しようとするたびにこのエラーが発生しました

フォームのビュー データはクラス Faumix\ProductPriceBundle\Entity\Variant のインスタンスであると予想されますが、クラス Sylius\Bundle\CoreBundle\Model\Variant のインスタンスです。このエラーを回避するには、「data_class」オプションを null に設定するか、クラス Sylius\Bundle\CoreBundle\Model\Variant のインスタンスを Faumix\ProductPriceBundle\Entity\Variant のインスタンスに変換するビュー トランスフォーマーを追加します。500 内部サーバー エラー - LogicException

ここに私のエンティティがあります

<?php

namespace Faumix\ProductPriceBundle\Entity;


use Sylius\Bundle\CoreBundle\Model\Variant as BaseVariant;



class Variant extends BaseVariant{

protected $unitCost;

protected $landedCost;

protected $averagePrice;

protected $profitMargin;

protected $discountA;

protected $discountB;

protected $supplier;

protected $supplierCurrency;

protected $supplierPrice;

protected $reorderLevel;


/**
 * {@inheritdoc}
 */
public function setUnitCost($unitCost)
{
    $this->unitCost = $unitCost;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getUnitCost()
{
    return $this->unitCost;
}

/**
 * {@inheritdoc}
 */
public function setLandedCost($landedCost)
{
    $this->landedCost = $landedCost;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getLandedCost()
{
    return $this->landedCost;
}

/**
 * {@inheritdoc}
 */
public function setAveragePrice($averagePrice)
{
    $this->averagePrice = $averagePrice;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getAveragePrice()
{
    return $this->averagePrice;
}


/**
 * {@inheritdoc}
 */
public function setProfitMargin($profitMargin)
{
    $this->profitMargin = $profitMargin;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getProfitMargin()
{
    return $this->profitMargin;
}

/**
 * {@inheritdoc}
 */
public function setDiscountA($discountA)
{
    $this->discountA = $discountA;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getDiscountA()
{
    return $this->discountA;
}

/**
 * {@inheritdoc}
 */
public function setDiscountB($discountB)
{
    $this->discountB = $discountB;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getDiscountB()
{
    return $this->discountB;
}


/**
 * {@inheritdoc}
 */
public function setSupplierPrice($supplierPrice)
{
    $this->supplierPrice = $supplierPrice;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getSupplierPrice()
{
    return $this->supplierPrice;
}


/**
 * {@inheritdoc}
 */
public function setReorderLevel($reorderLevel)
{
    $this->reorderLevel = $reorderLevel;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getReorderLevel()
{
    return $this->reorderLevel;
}

/**
 * {@inheritdoc}
 */
public function setSupplier($supplier)
{
    $this->supplier = $supplier;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getSupplier()
{
    return $this->supplier;
}

/**
 * {@inheritdoc}
 */
public function setSupplierCurrency($currency)
{
    $this->supplierCurrency = $currency;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function getSupplierCurrency()
{
    return $this->supplierCurrency;
}


}

ここに私のエンティティxmlファイルがあります

<?xml version="1.0" encoding="UTF-8"?>

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                              http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"
              xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mapping"
    >

<entity name="Faumix\ProductPriceBundle\Entity\Variant" table="sylius_variant">

    <field name="unitCost" column="unit_cost" type="float" nullable="true">
        <gedmo:versioned />
    </field>
    <field name="landedCost" column="landed_cost" type="float" nullable="true"/>
    <field name="profitMargin" column="profitMargin" type="integer" nullable="true"/>
    <field name="averagePrice" column="average_price" type="float" nullable="true" />
    <field name="discountA" column="discount_a" type="float" nullable="true">
        <gedmo:versioned />
    </field>
    <field name="discountB" column="discount_b" type="float" nullable="true">
        <gedmo:versioned />
    </field>
    <field name="reorderLevel" column="reorder_level" type="integer" nullable="true">
        <gedmo:versioned />
    </field>
    <field name="supplierPrice" column="supplier_price" type="float" nullable="true">
        <gedmo:versioned />
    </field>
    <field name="supplier" column="supplier" type="string" nullable="true">
        <gedmo:versioned />
    </field>
    <field name="supplierCurrency" column="supplier_currency" type="string" nullable="true">
        <gedmo:versioned />
    </field>
    <gedmo:loggable />
</entity>

</doctrine-mapping>

テーブルを更新する php app/console doctrine:schema:update --force を実行しても、これまでのところすべて問題ありません

フォームを拡張しようとしましたが、すべてのフィールドを追加しませんでした。

EDIT 1 フォームを拡張しましたが、別のエラーが発生しました

プロパティ "unitCost" もメソッド "getUnitCost()"、"isUnitCost()"、"hasUnitCost()"、"__get()" のいずれも存在せず、クラス "Sylius\Bundle\CoreBundle\Model\変異体"。500 内部サーバー エラー - NoSuchPropertyException

そしてこれがフォームクラス

namespace Faumix\ProductPriceBundle\Form\Type;

use Sylius\Bundle\CoreBundle\Form\Type\VariantType as BaseVariantType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;


class VariantType extends BaseVariantType  {


/**
 * {@inheritdoc}
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    parent::buildForm($builder, $options);

    $builder
        ->add('unitCost', 'text', array(
            'data_class' => 'Sylius\Bundle\CoreBundle\Model\Variant',
            'label' => 'Unit Cost',
        ))
        ->add('landedCost', 'sylius_money', array(
            'label' => 'Landed Cost',
            'data_class' => 'Faumix\ProductPriceBundle\Entity\Variant'
        ))
        ->add('averagePrice', 'text', array(
            'label'    => 'average Price',
            'data_class' => 'Faumix\ProductPriceBundle\Entity\Variant'
        ))
        ->add('profitMargin', 'text', array(
            'label'    => 'profit Margin',
            'data_class' => 'Faumix\ProductPriceBundle\Entity\Variant'
        ))
       ->add('discountA', 'text', array(
            'label'    => 'discount A',
            'data_class' => 'Faumix\ProductPriceBundle\Entity\Variant'
        ))
       ->add('discountB', 'text', array(
            'label'    => 'discount B',
            'data_class' => 'Faumix\ProductPriceBundle\Entity\Variant'
        ))
       ->add('supplier', 'text', array(
            'label'    => 'supplier',
            'data_class' => 'Faumix\ProductPriceBundle\Entity\Variant'
        ))
       ->add('supplierCurrency', 'text', array(
            'label'    => 'supplierCurrency',
            'data_class' => 'Faumix\ProductPriceBundle\Entity\Variant'
        ))
       ->add('supplierPrice', 'text', array(
            'label'    => 'supplier Price',
            'data_class' => 'Faumix\ProductPriceBundle\Entity\Variant'
        ))
       ->add('reorderLevel', 'text', array(
            'label'    => 'reorder Level',
            'data_class' => 'Faumix\ProductPriceBundle\Entity\Variant'
        ))


    ;
}


/**
 * {@inheritdoc}
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver
        ->setDefaults(array(
//               'data_class'        => 'Faumix\ProductPriceBundle\Entity\Variant',
           'data_class'        => 'Sylius\Bundle\CoreBundle\Model\Variant',
            'validation_groups' => $this->validationGroups,
            'master'            => false
        ))
    ;
}

}

data_class を定義せずに試してみましたが、影響がないようです

誰かがこれで私を助けることができれば幸いです

よろしく

4

1 に答える 1

0

問題がどこから来ているのかわかりましたか。私は Sylius で別のモデルを拡張しようとしている同様のものを持っており、バリアント モデルを拡張しようとしていました。ありがとう

編集:これは実際には Variant モデルで正常に動作していますが、誰かが解決策を思いついた場合に備えて、まだ ImagineBlockType に問題があります (ここで報告された問題https://github.com/Sylius/Sylius/issues/2544 )

于 2015-03-09T14:16:20.963 に答える