3

モデル User (SyliusCoreBundle/Model/User) に新しいフィールド「phone」を追加しようとしています。SyliusCoreBundleに触れるのを避け、

基本ユーザー クラスをオーバーライドするために、他の sylius バンドルの横にある新しいバンドル 'ShopBundle' を作成します。

src/Sylius/Bundle/ShopBundle

フォルダー ShopBundle 内:

> /Controller(empty)

> /DependencyInjection(empty)

> /Model

>         /User.php
> /Resources

>         /config/doctrine/model/user.orm.xml
>         /config/service.xml (empty)
> SyliusShopBundle.php

ファイルsrc/Sylius/Bundle/ShopBundle/Model/User.phpには、次のものがあります。

    <?php

namespace Sylius\Bundle\ShopBundle\Model;

use Sylius\Bundle\CoreBundle\Model\User as BaseUser;

class User extends BaseUser
{
  protected $mobile;

  /**
   * {@inheritdoc}
   */
  public function setMobile($mobile)
  {
    $this->mobile = $mobile;
  }
  /**
   * {@inheritdoc}
   */
  public function getMobile()
  {
    return $this->mobile;
  }
}

ファイルsrc/Sylius/Bundle/ShopBundle/Resources/config/doctrine/model/user.orm.xmlには、次のものがあります。

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

    <mapped-superclass name="Sylius\Bundle\ShopBundle\Model\User" table="sylius_user">

        <field name="mobile" column="mobile" type="string" nullable="true" />

    </mapped-superclass>

</doctrine-mapping>

ファイルsrc/Sylius/Bundle/ShopBundle/SyliusShopBundle.phpには、次のものがあります。

 class SyliusShopBundle extends Bundle
{
    /**
     * Return array with currently supported drivers.
     *
     * @return array
     */
    public static function getSupportedDrivers()
    {
        return array(
            SyliusResourceBundle::DRIVER_DOCTRINE_ORM
        );
    }
}

この行を app/AppKernel.php に追加します

new Sylius\Bundle\ShopBundle\SyliusShopBundle(),

最後に、私は次のように称賛します:

php app/console doctrine:schema:update --dump-sql

データベースで更新するものは何もありません。

見逃した部分は?それを機能させるにはどうすればよいですか?ありがとう !!


フォルダー DependencyInjection に 2 つのファイルを追加しました

Configuration.php

class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('sylius_shop');

        $rootNode
            ->addDefaultsIfNotSet()
            ->children()
                ->scalarNode('driver')->cannotBeOverwritten()->isRequired()->cannotBeEmpty()->end()
            ->end()
        ;

        $this->addClassesSection($rootNode);

        return $treeBuilder;
    }

    /**
     * Adds `classes` section.
     *
     * @param ArrayNodeDefinition $node
     */
    private function addClassesSection(ArrayNodeDefinition $node)
    {
        $node
            ->children()
                ->arrayNode('classes')
                    ->addDefaultsIfNotSet()
                    ->children()
                        ->arrayNode('user')
                            ->addDefaultsIfNotSet()
                            ->children()
                                ->scalarNode('model')->defaultValue('Sylius\\Bundle\\ShopBundle\\Model\\User')->end()
                            ->end()
                        ->end()
                    ->end()
                ->end()
            ->end()
        ;
    }
}

SyliusShopExtension.php

<?php

namespace Sylius\Bundle\ShopBundle\DependencyInjection;

use Sylius\Bundle\ResourceBundle\DependencyInjection\SyliusResourceExtension;
use Symfony\Component\DependencyInjection\ContainerBuilder;


class SyliusShopExtension extends SyliusResourceExtension
{
    /**
     * @var array
     */
    private $bundles = array();

    /**
     * {@inheritdoc}
     */
    public function load(array $config, ContainerBuilder $container)
    {
        $this->configDir = __DIR__.'/../Resources/config';

        $this->configure($config, new Configuration(), $container, self::CONFIGURE_LOADER | self::CONFIGURE_DATABASE | self::CONFIGURE_PARAMETERS);
    }


}
4

2 に答える 2

4
  1. User.orm.xmlではないはずuser.orm.xmlです。
  2. sylius_core -> classes -> user -> modelノードの下にクラスを構成する必要があります。
  3. Sylius バンドルからバンドルを刺激するべきではありません。非常に基本的な Symfony バンドルを作成し、 User エンティティをEntity名前空間の下に置くだけで、Symfony はそれを の下に表示しませんModel
于 2013-11-13T09:06:21.017 に答える
1

Sylius フィクスチャを使用するには、ユーザー リソースも設定する必要があることを追加します。

sylius_resource:
  resources:
    sylius.user:
      classes:
        model: MyBundle\UserBundle\Entity\User
于 2014-09-02T09:16:17.597 に答える