78 lines
2.3 KiB
Markdown
78 lines
2.3 KiB
Markdown
How to Enhance a User Model
|
|
===========================
|
|
|
|
It is obvious that if you started your project development on Yii2 Framework, then your business and domain needs
|
|
are going to be very customized, and more or less unique. While our extension (and of course Yii2 Framework itself!)
|
|
provide sensible defaults where it's possible, we encourage and keep in mind user will extend classes.
|
|
|
|
Very often you have to override and add your own domain (or application specific code) to your user model. With this
|
|
extension this is very easy and can be done in a few minutes!
|
|
|
|
For the case if you're using [Sidekit Application Template](../installation/sidekit-application-template.md) or
|
|
[Advanced Application Template](../installation/advanced-application-template.md) create the following class file
|
|
at the `%PROJECT_DIR%/common/models/User.php` path:
|
|
|
|
```php
|
|
namespace common\models;
|
|
|
|
use Da\User\Model\User as BaseUser;
|
|
|
|
class User extends BaseUser
|
|
{
|
|
}
|
|
```
|
|
|
|
Then adjust configuration of `yii2-usuario` extension module as follows:
|
|
|
|
```php
|
|
'modules' => [
|
|
'user' => [
|
|
'class' => Da\User\Module::class,
|
|
'classMap' => [
|
|
'User' => common\models\User::class,
|
|
],
|
|
],
|
|
],
|
|
```
|
|
|
|
Another way to do that is to use Yii2 Dependency Injection configuration as we extensively use service container
|
|
feature. This is good approach too:
|
|
|
|
```php
|
|
'container' => [
|
|
'definitions' => [
|
|
Da\User\Model\User::class => common\models\User::class,
|
|
],
|
|
],
|
|
```
|
|
|
|
> Please note, the method above works only starting from Yii 2.0.10 and upper. In version 2.0.9 and lower you can
|
|
> use explicit calls to DI container from application `bootstrap.php` file.
|
|
|
|
Finally you can now add new methods, properties, and other things to your new `User` model class:
|
|
|
|
```php
|
|
// model
|
|
class User extends BaseUser
|
|
{
|
|
public function addFriend(User $friend)
|
|
{
|
|
// ...
|
|
}
|
|
}
|
|
|
|
// somewhere in controller
|
|
class ProfileController extends Controller
|
|
{
|
|
public function actionAddFriend(int $id)
|
|
{
|
|
Yii::$app->user->identity->addFriend(User::findOne($id));
|
|
}
|
|
}
|
|
```
|
|
|
|
> This is absolutely good way to extend almost any class of the extension. For more information you could
|
|
> check `Da\User\Bootstrap` class file to see what you have in your control.
|
|
|
|
© [2amigos](http://www.2amigos.us/) 2013-2017
|