Dedikisme's Blog

Ngeblog biar dibilang eksis

Yii2 Building a Single Form With Multiple Models

Sebenernya simple sih, prosesnya sama kayka melakukan single form dengan single model tapi perbedaanya terletak pada validasinya saja. Misal saya punya 2 model, User dan Customer, pada controllernya sebagai berikut

ihikController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
...
   public function actionUhuk() {
        $modelCustomer = new Customer();
        $modelUser = new User(['scenario' => 'register']);

        $postData = Yii::$app->request->post();
    if ($modelUser->load($postData) && $modelCustomer->load($postData) && Model::validateMultiple([$modelUser, $modelCustomer])) {
          // terserah, sekarang mau diapain

        return $this->redirect(['auuhh']);
        } else {
        return $this->render('uhuk', ['model' => $modelCustomer, 'modelUser' => $modelUser]);
        }
    }
...
?>

Depdrop Yii2 Tutorial

Depdrop pada Yii2 adalah sebuah ekstensi untuk kondisional dropdown dengan ajak yang mempengaruhi value dari dropdown lain, contohnya misal untuk kasus pemilihan provinsi yang berdampak pada value pada dropdown kota. Untuk caranya pertama masukkan repositori kartik widget pada require

1
"kartik-v/yii2-widgets": "dev-master",

sehingga composer.json akan berisi seperti dibawah

composer.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{
  "name": "yiisoft/yii2-app-advanced",
  "description": "Yii 2 Advanced Application Template",
  "keywords": ["yii2", "framework", "advanced", "application template"],
  "homepage": "http://www.yiiframework.com/",
  "type": "project",
  "license": "BSD-3-Clause",
  "support": {
      "issues": "https://github.com/yiisoft/yii2/issues?state=open",
      "forum": "http://www.yiiframework.com/forum/",
      "wiki": "http://www.yiiframework.com/wiki/",
      "irc": "irc://irc.freenode.net/yii",
      "source": "https://github.com/yiisoft/yii2"
  },
  "minimum-stability": "dev",
  "require": {
      "php": ">=5.4.0",
      "yiisoft/yii2": "*",
      "yiisoft/yii2-bootstrap": "*",
      "yiisoft/yii2-swiftmailer": "*",
      "kartik-v/yii2-widgets": "dev-master"
  },
  "require-dev": {
      "yiisoft/yii2-codeception": "*",
      "yiisoft/yii2-debug": "*",
      "yiisoft/yii2-gii": "*"
  },
  "suggest": {
      "codeception/codeception": "Codeception, 1.8.*@dev is currently works well with Yii.",
      "codeception/specify": "BDD style code blocks for PHPUnit and Codeception",
      "codeception/verify": "BDD Assertions for PHPUnit and Codeception",
      "yiisoft/yii2-faker": "Fixtures generator for Yii2 based on Faker lib"
  },
  "scripts": {
      "post-create-project-cmd": [
          "yii\\composer\\Installer::setPermission"
      ]
  },
  "config": {
      "process-timeout": 1800
  },
  "extra": {
      "writable": [
          "backend/runtime",
          "backend/web/assets",

          "frontend/runtime",
          "frontend/web/assets"
      ]
  }
}

Rbac DBManager Yii2 Migration Table

Sebenernya ini lanjutan dari artikel 2 bulan yang lalu mengenai Rbac Yii2 Menggunakan DBManager. Kalo gak salah linknya yang ini http://blog.dedikisme.com/blog/2014/05/10/rbac-yii2-authmanager/ untuk menggunkan Rbac DBmanager yang harus dilakukan membuat table – table yang dibutuhkan. caranya dengan eksekusi perintah berikut

1
yii migrate --migrationPath=vendor/yiisoft/yii2/rbac/migrations

jika berhasil akan muncul notifikasi seperti ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Yii Migration Tool (based on Yii v2.0.0-dev)

Total 1 new migration to be applied:
    m140506_102106_rbac_init

Apply the above migration? (yes|no) [no]:yes
*** applying m140506_102106_rbac_init
    > create table  ... done (time: 0.341s)
    > create table  ... done (time: 0.212s)
    > create index idx-auth_item-type on  (type) ... done (time: 0.328s)
    > create table  ... done (time: 0.262s)
    > create table  ... done (time: 0.201s)
*** applied m140506_102106_rbac_init (time: 1.427s)


Migrated up successfully.

Xdmx & Ubuntu

xdmx adalah aplikasi untuk menshare display monitor pada komputer lain (biasanya sih laptop lama yg gak kepake). ok untuk instalasinya

command
1
sudo apt-get install xdmx

jika pake fedora dan sejenisnya dengan perintah

command
1
sudo yum install xorg-x11-server-Xdmx

kemudian login ssh ke komputer server menggunakan komputer yang akan digunakan sebagai tumbal monitor

command
1
ssh -X -c blowfish-cb username@ipKomputerServer

RMRE Rails Models Reverse Engineering

RMRE adalah sebuah model generator untuk ruby on rails, si RMRE menggenerate model yang berasal dari database yang sudah ada beserta relasi – relasi antar table didalamnya. Untuk instalasinya

command
1
gem install rmre

untuk menggenerate

command
1
rmre -a mysql2 -d nama_database -u username_database -p passwordnya -o path/output/model/class

contoh dari generate tersebut seperti

6 Wanita Yang Tidak Boleh Dinikahi

Bukannya ngelarang sih, tapi ya kalau mau ya silahkan yang mau nikahi wanita sebgai berikut:

  1. wanita yang menyepelehkan masalah titit
  2. wanita bertitit tapi tidak bisa menggunakannya
  3. wanita tidak bertitit tapi gak tau apa guna titit
  4. wanita beritit
  5. wanita yang pengen makan titit
  6. wanita yang tidak bertitit tapi pengen punya titit

Implementasi I18n Yii2 Framework

i18n atau yang biasa di sebut Internationalization sebenernya cukup mudah pada Yii2 Langkah pertama tambahkan config berikut pada config/main.php tambahkan beberapa baris berikut

main.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
);

return [
    'id' => 'app-backend',
    'basePath' => dirname(__DIR__),
    'language' => 'id', // Tambahkan  baris ini
    'controllerNamespace' => 'backend\controllers',
    'bootstrap' => ['log'],
    'modules' => [],
    'components' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
 'i18n' => [                                          // tambahkan juga baris ini
            'translations' => [                       // ini
                '*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
//                'basePath' => '@app/messages', 
//                'sourceLanguage' => 'en',
                    'fileMap' => [
                        'app' => 'app.php',
                        'app/error' => 'error.php',
                    ],
                ],
            ],
        ], //sampe sini
    ],
    'params' => $params,
];

Rbac Yii2 authManager

Lanjutan dari artikel Rbac Yii2 Framework => http://blog.dedikisme.com/blog/2014/05/09/rpbac-yii2-framework/

jika ingin lebih flexible dan ringkas, kode

apaajaController.php
1
2
3
4
5
$phpm = new PhpManager;
// buat "readPost" permission
$readPost =  $phpm->createPermission('readPost');
$readPost->description = 'read a post';
$phpm->add($createPost);

bisa diganti dengan

apaajaController.php
1
2
3
4
$phpm = Yii::$app->authManager;
$readPost =  $phpm->createPermission('readPost');
$readPost->description = 'read a post';
$phpm->add($createPost);

dan untuk mengecek akses user tinggal mengganti

apaajaController.php
1
$phpm->checkAccess('2', 'writePost')  // angka 2 adalah ID user

dengan

apaajaController.php
1
Yii::$app->user->can('writePost');

Rbac Yii2 Framework

RBAC (Role Based Access Control) adalah Role Based Access Control, dari kepanjangannya udah kebayangkan apa itu RBAC, di yii2 rbac udah ada jadi tinggal pake, dan di yii2 ini ada 2 tempat untuk menempatkan access controlnya, di file (defaultnya di @app/data/rbac.php) dan di databasenya juga bisa. Tapi kali ini yang aku pelajari yang versi file. ok Langsung saja buat Controller, sebelumnya buat file rbac.php pada path berikut @app/data/rbac.php, dan set chmodnya +w pasang kode ini di controller

apaajaController.php
1
2
3
4
5
$phpm = new PhpManager;
// buat "readPost" permission
$readPost =  $phpm->createPermission('readPost');
$readPost->description = 'read a post';
$phpm->add($createPost);

kode diatas akan membuat role baru

oh ya jangan lupa use namespacenya

apaajaController.php
1
use yii\rbac\PhpManager;

kemudian akses controller tersebut, maka data rbac.php yang tadi dibuat akan ada permission baru

rbac.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
return array(
    'items' =>
    array(
        'readPost' =>
        array(
            'type' => 2,
            'description' => 'read a post',
        ),
    ),
    'rules' =>
    array(
    ),
);