Installation
Add the package to composer.json:
{
"require": {
"belsym/common-bundle": "*"
}
}
Run composer update.
Register the Bundle
Add new Belsym\CommonBundle\BelsymCommonBundle() to app/Kernel.php under registerBundles().
First Use Case: BaseEntity
Extend BaseEntity in your entity:
use Belsym\CommonBundle\Entity\BaseEntity;
class User extends BaseEntity
{
// Your custom fields/methods
}
Run php bin/console doctrine:schema:update --force to apply timestamps (createdAt, updatedAt).
class Post extends BaseEntity
{
// Automatically gets `id`, `createdAt`, `updatedAt`
}
Customer, Admin).
class Customer extends BaseUser
{
// Inherits `firstName`, `lastName`, `dateOfBirth`
}
Status table).
class Status extends BaseLookup
{
// Uses a lookup table instead of SQLite enum
}
use Belsym\CommonBundle\DBAL\Types\EnumType;
$platform->registerDoctrineTypeMapping('enum', EnumType::class);
use Belsym\CommonBundle\Tests\BaseDatabaseTestCase;
class UserTest extends BaseDatabaseTestCase
{
public function testUserCreation()
{
$user = new User();
$this->assertInstanceOf(BaseEntity::class, $user);
}
}
use Belsym\CommonBundle\Tests\BaseFixtureLoadingTestCase;
class FixtureTest extends BaseFixtureLoadingTestCase
{
protected function getFixturesDir()
{
return __DIR__ . '/../fixtures';
}
}
BaseLookup is a workaround; test thoroughly in SQLite.TODO sections imply incomplete functionality (e.g., BaseUser usage).createdAt/updatedAt are not overridden in child entities.getFixturesDir() returns a valid path in test cases.BaseEntity methods to add default values:
public function __construct()
{
$this->setStatus('draft'); // Default status
}
class CustomEnumType extends EnumType
{
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
// Custom logic
}
}
setUp() in BaseDatabaseTestCase to reset state:
public function setUp(): void
{
$this->getEntityManager()->getConnection()->beginTransaction();
parent::setUp();
}
How can I help you explore Laravel packages today?