Пользовательский пакет сонаты, переопределить

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

Я видел папку Application \ Sonata \ UserBundle, которая создается при установке пакета пользователя sonata.

Затем я попытался изменить файл Entity \ User.php:

<?php

namespace Application\Sonata\UserBundle\Entity;

use Sonata\UserBundle\Entity\BaseUser as BaseUser;

class User extends BaseUser
{
/**
* @var integer $id
*/
protected $id;

/**
* Get id
*
* @return integer $id
*/
public function getId()
{
return $this->id;
}

Например добавление:

<?php

namespace Application\Sonata\UserBundle\Entity;

use Sonata\UserBundle\Entity\BaseUser as BaseUser;

class User extends BaseUser
{
/**
* @var integer $id
*/
protected $id;

/**
* Get id
*
* @return integer $id
*/
public function getId()
{
return $this->id;
}
/**
* @var String $nom
*/
protected $nom;
/**
* Get nom
*
* @return string
*/
public function getNom() {
return $this->nom;
}

Но моя база данных не обновляется и ничего не работает. Ты знаешь, как это сделать?

В качестве альтернативы я также попытался написать в файле UserAdmin.php:

 $formMapper
->with('General')
->add('username')
->add('email')
->add('plainPassword', 'text', array(
'required' => (!$this->getSubject() || is_null($this->getSubject()->getId()))
))
->add('nom')
->end()
->with('Groups')
->add('groups', 'sonata_type_model', array(
'required' => false,
'expanded' => true,
'multiple' => true
))
->end()

Но у меня есть следующая ошибка:

Please define a type for field `Prenom` in `Sonata\UserBundle\Admin\Entity\UserAdmin`

Спасибо
С наилучшими пожеланиями

1

Решение

После того как вы сгенерировали простое расширение для пользовательского пакета sonata, соната создает файлы orm для сущностей, например, если ваш расширенный пакет создается в src/Application тогда ваши файлы отображения orm будут сгенерированы в src/Application/Sonata/UserBundle/Resources/config/doctrine как User.orm.xml или же User.mongodb.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">
<entity name="Application\Sonata\UserBundle\Entity\User" table="fos user table name">
<id name="id" column="id" type="integer">
<generator strategy="AUTO" />
</id>
<field name="nom" type="string" column="title" length="255" nullable="false"/>
</entity>
</doctrine-mapping>

Если вам не нужно сопоставление xml и вы хотите использовать аннотации, переименуйте папку доктрины в другую src/Application/Sonata/UserBundle/Resources/config/doctrine-backup сейчас в вашем User объект добавить ваше отображение поля в виде аннотации

namespace Application\Sonata\UserBundle\Entity;
use Sonata\UserBundle\Entity\BaseUser as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Table(name="fos user table name")
* @ORM\Entity
*/
class User extends BaseUser {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=255, nullable=true)
*/
protected $nom;

/**
* Set nom
*
* @param string $nom
*
* @return User
*/
public function setNom( $nom) {
$this->nom= $nom;

return $this;
}

/**
* Get nom
*
* @return string
*/
public function getNom() {
return $this->nom;
}

}

Также следует отметить, что не следует изменять основные файлы пакета, как говорится в вашей ошибке Sonata\UserBundle\Admin\Entity\UserAdmin попытаться переопределить основной пользовательский класс администратора. Соната предоставляет способ конфигурации пользовательского пакета для определения административного класса.

sonata_user:
class:                  # Entity Classes
user:               Application\Sonata\UserBundle\Entity\User
group:              Application\Sonata\UserBundle\Entity\Group

admin:                  # Admin Classes
user:
class:          Application\Sonata\UserBundle\Admin\UserAdmin # there define your extended admin class
controller:     SonataUserBundle:UserCURD
translation:    SonataUserBundle

group:
class:          Sonata\UserBundle\Admin\Entity\GroupAdmin
controller:     SonataAdminBundle:CRUD
translation:    SonataUserBundle
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]