codeconsortium/ccdn-user-member-bundle
Install Dependencies
Ensure codeconsortium/ccdn-user-bundle and codeconsortium/ccdn-user-member-bundle are installed via Composer:
composer require codeconsortium/ccdn-user-bundle
composer require codeconsortium/ccdn-user-member-bundle
Enable Bundles
Add to config/bundles.php:
return [
// ...
CodeConsortium\CCDNUserBundle\CCDNUserBundle::class => ['all' => true],
CodeConsortium\CCDNUserMemberBundle\CCDNUserMemberBundle::class => ['all' => true],
];
Database Migrations
Run Doctrine migrations to create the member table:
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
First Use Case Register a new member via the CLI or a controller:
use CodeConsortium\CCDNUserMemberBundle\Entity\Member;
$member = new Member();
$member->setUsername('john_doe');
$member->setEmail('john@example.com');
$member->setPlainPassword('secure123');
$member->setEnabled(true);
$em = $this->getDoctrine()->getManager();
$em->persist($member);
$em->flush();
Member Registration
Extend the default registration logic by leveraging the MemberType form:
use CodeConsortium\CCDNUserMemberBundle\Form\Type\MemberType;
$form = $this->createForm(MemberType::class, $member);
Role-Based Access Control
Use the Member entity’s roles property to assign permissions:
$member->addRole('ROLE_MEMBER');
$member->addRole('ROLE_ADMIN'); // If needed
Member Profile Management Fetch and update member profiles:
$member = $em->getRepository(Member::class)->find($id);
$member->setFirstName('John');
$member->setLastName('Doe');
$em->flush();
Integration with CCDNUserBundle
Use the User entity from CCDNUserBundle as a base for Member:
$member = new Member();
$member->setUser($userEntity); // Link to CCDNUserBundle's User
Event Listeners
Subscribe to MemberEvents (e.g., MemberRegisteredEvent) for post-registration actions:
# config/services.yaml
services:
App\EventListener\MemberListener:
tags:
- { name: kernel.event_listener, event: member.registered, method: onMemberRegistered }
Custom Fields
Extend the Member entity to add custom attributes:
/**
* @ORM\Column(type="string", nullable=true)
*/
private $customField;
API Endpoints Use Symfony’s Serializer to expose member data:
$serializer = $this->container->get('serializer');
$memberData = $serializer->serialize($member, 'json', ['groups' => ['member']]);
Symfony 2.1.x Dependency
symfony/symfony v2.1.x for legacy projects.Missing Documentation
src/CodeConsortium/CCDNUserMemberBundle/Resources/config/doctrine/ for entity mappings and src/Form/Type/ for form logic.Doctrine Configuration
CCDNUserBundle is configured before CCDNUserMemberBundle in bundles.php to avoid autoloading errors.Password Handling
UserInterface for password hashing. Override setPlainPassword() if custom logic is needed:
$member->setPlainPassword($plainPassword);
$member->setPassword($this->passwordEncoder->encodePassword($member, $plainPassword));
Check Entity States Use Doctrine’s lifecycle callbacks to debug entity changes:
// In Member.php
public function prePersist()
{
if (empty($this->salt)) {
$this->salt = bin2hex(random_bytes(16));
}
}
Form Validation Errors
Enable debug mode (APP_DEBUG=true) to see form validation errors in Symfony’s profiler.
Event Debugging Dump events in a listener to verify triggers:
public function onMemberRegistered(MemberRegisteredEvent $event)
{
dump($event->getMember());
}
Custom Member Types
Create a subclass of Member for role-specific logic:
class PremiumMember extends Member
{
/**
* @ORM\Column(type="integer")
*/
private $premiumTier;
}
Override Templates
Copy templates from Resources/views/ to your project’s templates/CCDNUserMemberBundle/ to customize rendering.
Add Validation Constraints
Extend the Member entity with custom constraints:
use Symfony\Component\Validator\Constraints as Assert;
/**
* @Assert\NotBlank(message="Email cannot be blank")
* @Assert\Email(message="Invalid email format")
*/
private $email;
API Integration Use FOSRestBundle or API Platform to expose member endpoints:
# config/routes.yaml
app_member_get:
path: /api/members/{id}
methods: GET
defaults:
_controller: App\Controller\MemberController::getMemberAction
_format: json
How can I help you explore Laravel packages today?