Tags

, , ,

Iseng-iseng mensimulasikan fitur prototype-nya javascript di Yii2. Dengan behavior ini, kita bisa menambahkan property atau methode pada suatu objek. Langsung saja, berikut source-nya

Cara menggunakannya

// config, diattach ke komponen user
'components' => [
    ...
    'user' => [
        ...
        'as prototype' => 'app\components\Prototype',
    ]
],

Selanjutnya kita bisa menambahkan property atau methode baru ke komponen user.

// menambahkan property email
Yii::$app->user->prototype->email = Yii::$app->user->identity->email;

echo Yii::$app->user->email; // kita bisa langsung memanggil property email.

// menambahkan method
Yii::$app->user->prototype->isAdmin = function(){
    return Yii::$app->user->identity->role == User::ROLE_ADMIN;
};

if(Yii::$app->user->isAdmin()){ // bisa langsung mengakses method
    // do something
}

Behavior ini bisa diattach ke object apa saja (turunan dari yii\base\Component), misal ke Yii::$app.

// config
return [
    ...
    'as prototype' => 'app\components\Prototype',
];


// penggunaan
Yii::$app->prototype->asPdf = function($filename){
    $response = Yii::$app->getResponse();
    $response->format = yiiwebResponse::FORMAT_RAW;
    $response->setDownloadHeaders($filename, 'application/pdf');    
};

// action
public function actionReport()
{
    $content = generate_content_report();

    Yii::$app->asPdf('report.pdf'); // set respon header
    return $content;
}
Advertisements