 Wallogit.com
                    
                    2017 © Pedro Peláez
                         Wallogit.com
                    
                    2017 © Pedro Peláez
                    
                    
                    
                    
                
                
            
Yii2 View Presenter
So you have those scenarios where a bit of logic needs to be performed before some data (likely from your entity) is displayed from the view., (*1)
Instead, leverage view presenters. That's what they're for! This package provides one such implementation., (*2)
Run the Composer command to install the latest stable version:, (*3)
composer require frostealth/yii2-presenter @stable
The first step is to store your presenters somewhere - anywhere. These will be simple objects that do nothing more than format data, as required., (*4)
Here's an example of a presenter., (*5)
namespace app\presenters;
use app\models\User;
use frostealth\yii2\presenter\Presenter;
/**
 * Class ConcreteEntityPresenter
 *
 * @property User   $entity
 *
 * @property-read string $firstName
 * @property-read string $lastName
 * @property-read string $fullName
 * @property-read string $birthDate
 */
class UserPresenter extends Presenter
{
    /**
     * @return string
     */
    public function getFullName()
    {
        return implode(' ', [$this->firstName, $this->lastName]);
    }
    /**
     * @return string
     */
    public function getBirthDate()
    {
        return date('y.M.d', $this->entity->birthDate);
    }
    /**
     * @inheritdoc
     * @see \yii\base\Arrayable::fields()
     * @link http://www.yiiframework.com/doc-2.0/guide-rest-resources.html#fields
     */
    public function fields()
    {
        $fields = parent::fields();
        $fields[] = 'fullName';
        return $fields;
    }
}
Next, on your entity, pull in the frostealth\yii2\presenter\traits\PresentableTrait trait, 
which will automatically instantiate your presenter class., (*6)
Here's an example of an presentable model., (*7)
namespace app\models;
use app\presenters\UserPresenter;
use frostealth\presenter\interfaces\PresentableInterface;
use frostealth\yii2\presenter\traits\PresentableTrait;
/**
 * Class User
 *
 * @property string $firstName
 * @property string $lastName
 * @property string $birthDate
 * @property string $passwordHash
 * @property string $passwordResetToken
 *
 * @method UserPresenter presenter()
 */
class User extends ActiveRecord implements PresentableInterface
{
    use PresentableTrait;
    /**
     * @inheritdoc
     * @see \yii\base\Arrayable::fields()
     * @link http://www.yiiframework.com/doc-2.0/guide-rest-resources.html#fields
     */
    public function fields()
    {
        $fields = parent::fields();
        unset($fields['passwordHash'], $fields['passwordResetToken']);
        return $fields;
    }
    /**
     * @return string|array
     */
    protected function getPresenterClass()
    {
        return 'app\presenters\UserPresenter';
    }
}
Now, within your view, you can do:, (*8)
<dl>
    <dt>Name</dt>
    <dd><?= $model->presenter()->fullName ?></dd>
    <dt>Birth Date</dt>
    <dd><?= $model->presenter()->birthDate ?></dd>
</dl>
Here's an example of an controller., (*9)
namespace app\controllers;
use yii\rest\ActiveController;
class UserController extends ActiveController
{
    /** @inheritdoc */
    public $serializer = 'frostealth\yii2\presenter\rest\Serializer';
    /** @inheritdoc */
    public $className = 'app\models\User';
}
The MIT License (MIT). See LICENSE.md for more information., (*10)