Extend Entities¶
Sulu has a very easy way to extend and replace the internal entities. This feature is not implemented for each entity but it will be implemented for all soon.
These entities are ready to extend:
User
Role
Contact
Account
Category
Media
Tag
You can extend all of them in the same way. Therefore we explain it for User here.
Create a Entity¶
Create your own Entity for example in the src folder and extends the Entity with the Sulu User class.
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Sulu\Bundle\SecurityBundle\Entity\User as SuluUser;
/**
* The following annotations are required for replacing the table of the extended entity:
*
* @ORM\Table(name="se_users")
* @ORM\Entity
*/
class User extends SuluUser
{
/**
* @var string
*
* @ORM\Column(name="myProperty", type="string", length=255, nullable = true)
*/
private $myProperty;
/**
* Set myProperty
*
* @param string $myProperty
* @return User
*/
public function setMyProperty($myProperty)
{
$this->myProperty = $myProperty;
return $this;
}
/**
* Get myProperty
*
* @return string
*/
public function getMyProperty()
{
return $this->myProperty;
}
}
Warning
Your Entity can have own properties, but they should have at least default values. Otherwise the normal features of Sulu could crash (like the sulu:security:user:create command).
Warning
The @ORM\Table annotation on your entity must match the table of the extended entity. Otherwise, doctrine might run into errors when querying data of the entity.
Configuration¶
You can specify your new entity and if it exists your repository
in the configuration section of the file config/packages/*
.
If the file does not exist you need to create it.
For the User entity (se_users):
# config/packages/sulu_security.yaml
sulu_security:
objects:
user:
model: App\Entity\User
repository: Sulu\Bundle\SecurityBundle\Entity\UserRepository
For the Role entity (se_roles):
# config/packages/sulu_security.yaml
sulu_security:
objects:
role:
model: Sulu\Bundle\SecurityBundle\Entity\Role
repository: Sulu\Bundle\SecurityBundle\Entity\RoleRepository
For the Contact entity (co_contacts):
# config/packages/sulu_contact.yaml
sulu_contact:
objects:
contact:
model: Sulu\Bundle\ContactBundle\Entity\Contact
repository: Sulu\Bundle\ContactBundle\Entity\ContactRepository
For the Account entity (co_accounts):
# config/packages/sulu_contact.yaml
sulu_contact:
objects:
account:
model: Sulu\Bundle\ContactBundle\Entity\Account
repository: Sulu\Bundle\ContactBundle\Entity\AccountRepository
For the Category entity (ca_categories):
# config/packages/sulu_category.yaml
sulu_category:
objects:
category:
model: Sulu\Bundle\CategoryBundle\Entity\Category
repository: Sulu\Bundle\CategoryBundle\Entity\CategoryRepository
category_meta:
model: Sulu\Bundle\CategoryBundle\Entity\CategoryMeta
repository: Sulu\Bundle\CategoryBundle\Entity\CategoryMetaRepository
category_translation:
model: Sulu\Bundle\CategoryBundle\Entity\CategoryTranslation
repository: Sulu\Bundle\CategoryBundle\Entity\CategoryTranslationRepository
keyword:
model: Sulu\Bundle\CategoryBundle\Entity\Keyword
repository: Sulu\Bundle\CategoryBundle\Entity\KeywordRepository
For the Media entity (me_media):
# config/packages/sulu_media.yaml
sulu_media:
objects:
media:
model: Sulu\Bundle\MediaBundle\Entity\Media
repository: Sulu\Bundle\MediaBundle\Entity\MediaRepository
For the Tag entity (ta_tags):
# config/packages/sulu_tag.yaml
sulu_tag:
objects:
tag:
model: Sulu\Bundle\TagBundle\Entity\Tag
repository: Sulu\Bundle\TagBundle\Entity\TagRepository
Warning
If you override entities in an existing project, you need to migrate the existing data to avoid data loss.