PHPackages                             a2nt/silverstripe-member-profiles - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. a2nt/silverstripe-member-profiles

ActiveSilverstripe-module[Authentication &amp; Authorization](/categories/authentication)

a2nt/silverstripe-member-profiles
=================================

SilverStripe extendable profile areas. Provides registration page and extendable profile page area.

3912PHP

Since Aug 15Pushed 8y ago1 watchersCompare

[ Source](https://github.com/a2nt/silverstripe-member-profiles)[ Packagist](https://packagist.org/packages/a2nt/silverstripe-member-profiles)[ RSS](/packages/a2nt-silverstripe-member-profiles/feed)WikiDiscussions master Synced 3w ago

READMEChangelogDependenciesVersions (2)Used By (0)

SilverStripe Profile Area Module
================================

[](#silverstripe-profile-area-module)

Maintainer Contact
------------------

[](#maintainer-contact)

- Anton Fedianin &lt;tony (at) twma (dot) pro&gt;

Requirements
------------

[](#requirements)

- SilverStripe 3.2

Overview
--------

[](#overview)

A simplified light-weight alternative for frontend member profile areas.

- Registration page
- Profile page for updating details.
- Extendable profile area

### Registration Page

[](#registration-page)

Create member Registration Page at the CMS or run /dev/build?flush after module instalation

### Member Profile Page

[](#member-profile-page)

Create member Profile Page at the CMS or run /dev/build?flush after module instalation

### Profile Area

[](#profile-area)

By default profile area has only profile information and profile editing form controller to add extra profile areas use this example:

```
class MyProfileArea extends MemberProfilePage_Controller {
    /* ... your code
     * private static $allowed_actions = [
     *    'MyAction'
     * ];
     *
     * public function MyAction() {}
     *
    */
}
```

Profile information will use /profile URL, sub-controllers will use sub-URLs of this page for example: /profile/myprofilearea /profile/myprofilearea/action

/profile/myprofileareaCRUD/MyItemClassName/new/ /profile/myprofileareaCRUD/MyItemClassName/view/11 /profile/myprofileareaCRUD/MyItemClassName/edit/11 /profile/myprofileareaCRUD/MyItemClassName/delete/11 /profile/myprofileareaCRUD/extraaction/*ID*/*OtherID*

New area will be automatically added to frontend member profile area navigation menu, but you can add hide ancestor to keep it hidden:

```
class MyProfileArea extends ProfileController {
    private static $hide_ancestor = false; // it's optional if you want to hide this controller set to true
    private static $menu_icon = ''; // optional icon
    private static $menu_title = 'My Profile Area'; // optional title otherwise My Profile Area title will be used
}
```

Requirements config example:

```
ProfileController:
  requirements_css:
    - site/css/ProfileController.css
  requirements_javascript:
    - site/css/ProfileController.js
```

### Profile CRUD

[](#profile-crud)

```
class MyProfileObjectsController extends ProfileCRUD {
    /*
     * This controller will let you create, view, edit and delete objects
     */
    private static $hide_ancestor = false; // it's optional if you want to hide this controller set to true
    private static $menu_icon = ''; // optional icon
    private static $menu_title = 'My Profile Area'; // optional title otherwise My Profile Area title will be used

    private static $managed_models = [
        'MyObject',
        'MyObject2',
    ];

    private static $allowed_actions = [
        'ExtraAction'
    ];

    public function ExtraAction() {}
}
```

- to make "MyProfileArea" template create templates/profile/controllers/MyProfileArea.ss
- it will be used as sub-template of MemberProfilePage.ss by using $ProfileArea variable just like $Layout requires sub-template of Page.ss
- to create a specific action template of "MyProfileArea" create templates/profile/controllers/MyProfileArea\_MyAction.ss

Use following code to customize MemberRegistrationForm:

```
MemberRegistrationForm:
  extensions:
    - MyMemberRegistrationFormExtension
```

```
class MyMemberRegistrationFormExtension extends Extension
{
    public function updateMemberRegistrationForm()
    {
        /* your code, ex:
         * $fields = $this->owner->Fields();
         * $fields->push(TextField::create('MyField'));
         * BootstrapForm::apply_bootstrap_to_fieldlist($fields);
         * BootstrapForm::apply_bootstrap_to_fieldlist($this->owner->Actions());
        */
    }

    public function onRegister($member)
    {
        /* your code to execute on register for an instance extra notifications */
    }
}
```

Use following code to customize MemberEditProfileForm:

```
MemberEditProfileForm:
  extensions:
    - MyMemberEditProfileFormExtension
```

```
class MyMemberEditProfileFormExtension extends Extension
{
    public function updateMemberEditProfileForm()
    {
        /* your code, ex:
         * $fields = $this->owner->Fields();
         * $fields->push(TextField::create('MyField'));
         * BootstrapForm::apply_bootstrap_to_fieldlist($fields);
         * BootstrapForm::apply_bootstrap_to_fieldlist($this->owner->Actions());
        */
    }
}
```

Use following code to extend Profile CRUD item forms:

```
ProfileCRUD:
  extensions:
    - BootstrapItemEditForm
```

```
class BootstrapItemEditForm extends Extension
{
    public function permissionDenied()
    {
        // your code, for example:
        Page_Controller::setSiteMessage('You must log in to view your profile.', 'warning');
    }

    public function updateItemRemoved(DataObject $item)
    {
        // your code
    }

    public function updateItemRemoveDenied()
    {
        // your code
    }
    public function updateItemEditDenied()
    {
        // your code
    }

    public function updateItemEditSuccess(DataObject $item, array $data, $new = false)
    {
        if ($new) {
            $success_msg = 'New Item Created';
        } else {
            $success_msg = 'Item was updated';
        }

        // your code
    }

    public function updateItemForm($form)
    {
        $fields = $form->Fields();
        // setup bootstrap classes
        BootstrapForm::apply_bootstrap_to_fieldlist($fields);

        $fields = $form->Actions();
        // setup bootstrap classes
        BootstrapForm::apply_bootstrap_to_fieldlist($fields);
    }
}
```

[My personal website](https://tony.twma.pro)

[Buy me a Beer](https://www.paypal.me/tonytwma)

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/9c10d444da3afa00b1851c2595f47190836de733c6f49855d2a751b1e613f78d?d=identicon)[a2nt](/maintainers/a2nt)

---

Top Contributors

[![a2nt](https://avatars.githubusercontent.com/u/672794?v=4)](https://github.com/a2nt "a2nt (47 commits)")

### Embed Badge

![Health badge](/badges/a2nt-silverstripe-member-profiles/health.svg)

```
[![Health](https://phpackages.com/badges/a2nt-silverstripe-member-profiles/health.svg)](https://phpackages.com/packages/a2nt-silverstripe-member-profiles)
```

###  Alternatives

[kartik-v/yii2-password

Useful password strength validation utilities for Yii Framework 2.0

761.2M17](/packages/kartik-v-yii2-password)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
