PHPackages                             mdmunir/dee-app - 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. [Framework](/categories/framework)
4. /
5. mdmunir/dee-app

ActiveProject[Framework](/categories/framework)

mdmunir/dee-app
===============

Simple PHP Framework

21612[1 PRs](https://github.com/mdmunir/dee/pulls)PHPCI failing

Since Oct 10Pushed 4y ago6 watchersCompare

[ Source](https://github.com/mdmunir/dee)[ Packagist](https://packagist.org/packages/mdmunir/dee-app)[ RSS](/packages/mdmunir-dee-app/feed)WikiDiscussions master Synced 4w ago

READMEChangelogDependenciesVersions (12)Used By (0)

Dee Framework
=============

[](#dee-framework)

Framework PHP dengan pola MVC. Cocok untuk media belajar cara kerja framework.

[![Latest Stable Version](https://camo.githubusercontent.com/45d4edc80f60b1b01b0387272619882acd3e2f416097caa635513f843ddfa531/68747470733a2f2f706f7365722e707567782e6f72672f6d646d756e69722f6465652d6170702f762f737461626c65)](https://packagist.org/packages/mdmunir/dee-app)[![Latest Unstable Version](https://camo.githubusercontent.com/8a4c2f582f9b0de78f87b0512b48ea765326c11a5943fa003f44dbf7b751028f/68747470733a2f2f706f7365722e707567782e6f72672f6d646d756e69722f6465652d6170702f762f756e737461626c65)](https://packagist.org/packages/mdmunir/dee-app)[![Build Status](https://camo.githubusercontent.com/11fbf442462f4d76dbe1476d124922d55c5169df9ef65641a3182cb751c7bbf2/68747470733a2f2f7472617669732d63692e6f72672f6d646d756e69722f6465652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/mdmunir/dee)[![License](https://camo.githubusercontent.com/f25ad381749b0cdb134fd521b9967df6e15a982ab6d738bbb436944a54fb9a70/68747470733a2f2f706f7365722e707567782e6f72672f6d646d756e69722f6465652d6170702f6c6963656e7365)](https://packagist.org/packages/mdmunir/dee-app)

Instalasi
---------

[](#instalasi)

Download filenya dari [sini](https://github.com/mdmunir/dee/archive/master.zip), kemudian ekstak. Setelah itu buka command line, masuk ke folder hasil ekstraksi dan jalankan

```
php init

```

Fitur
-----

[](#fitur)

- Menggunakan pola MVC.
- Menggunakan autoloader. Meminimalkan penggunaan `include` dan `require`.
- `View templating`. Beberapa halaman dapat berbagi `layout` yang sama.
- Koneksi database dengan PDO.
- Register js dan css.
- Asset bundle.
- Clean url.
- Support url rules/routing. Bisa untuk membangun aplikasi REST.
- Aplikasi Console.
- Dan lain-lain.

Cara Penggunaan
---------------

[](#cara-penggunaan)

Membuat controller.
===================

[](#membuat-controller)

Buat class di folder `protected/controllers` dengan nama `Hello.php`.

```
namespace app\controllers;

class Hello extends \dee\base\Controller
{
    public function actionIndex()
    {
        return $this->render('index', ['name'=>'World']);
    }
}
```

- Perhatikan huruf besar huruf kecil. Controller class harus merupakan turunan dari class `dee\base\Controller`.
- Nama class harus sama dengan nama file dengan akhiran `.php`.
- Nama class menggunakan format camel case(huruf besar di awal kata). Misal, routenya adalah `hello`, maka nama classnya adalah `Hello`. Jika nama routenya adalah `hello-guys` maka nama classnya adalah `HelloGuys`.

Membuat view.
=============

[](#membuat-view)

Kemudian di folder `protected/views/hello` kita buat file `index.php`

```

        Welcome!

        Hello .

        Get started

```

- Folder view dari controller bersesuaian dengan id controller.
- Jika id controller adalah `hello`, maka viewnya ada di folder `protected/views/hello`. Begitu juga jika id controller adalah `hello-guys`, maka viewnya ada di folder `protected/views/hello-guys`.
- Kita juga bisa menyisipkan kode javascript di view. contoh

```

    Click Me

```

Untuk mengakses halaman yang kita buat, urlnya adalah `localhost/path/app/index.php/hello`

Asset Package
-------------

[](#asset-package)

Meregister file js dapat dilakukan dengan mudah lewat `Asset Package`. Caranya, kita daftarkan paket kita di file config

```
'components' => [
    'views' => [
        'packages' => [
            'bootstrap' => [
                'js' => ['https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js'],
                'css' => ['https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'],
                'depends' => ['jquery'],
            ],
        ]
    ]
]
```

Setelah itu di view kita, kita bisa menggunakan paket tersebut dengan merigesternya

```
/* @var $this \dee\base\View */

$this->registerPackage('bootstrap');
```

Saat ini paket inti yang tersedia adalah `jquery` yang mengarah ke `//code.jquery.com/jquery-2.2.4.min.js`. Anda dapat menggunakan jquery anda sendiri dengan cara menimpah konfigursinya

```
'components' => [
    'views' => [
        'packages' => [
            ...
            'jquery' => [
                'js' => ['@web/main/jquery.min.js'],
            ],
        ]
    ]
]
```

Paket `jquery` akan otomatis tersedia ketika meregister javascript di `POS_READY` atau `POS_LOAD`. Atau Anda dapat meregister manual dengan memanggil dari view `$this->registerPackage('jquery')`.

Clean URL
=========

[](#clean-url)

Untuk membuat url yang lebih bersih (menghilangkan `index.php`) lakukan beberapa langkah berikut.

- Membuat file `.htaccess`.

```
RewriteEngine on
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

```

- Merubah setingan `showScriptName`. Buka file `protected/config/web.php`. Ubah `showScriptName` menjadi `false`.

REST Url
========

[](#rest-url)

Rest url dapat dibuat dengan mengisi setingan `request->rules`. Contoh:

```
'rules' => [
    'GET,HEAD product' => 'product/index',
    'GET,HEAD product/{id:\d+}' => 'product/view',
    'POST product' => 'product/create',
    'PUT product/{id:\d+}' => 'product/update',
    'DELETE product/{id:\d+}' => 'product/delete',
]
```

Setelah itu kita buat controller `ProductController` dan mengimplementasikan action `actionIndex()`, `actionView()` dan seterusnya.

Koneksi ke Database
===================

[](#koneksi-ke-database)

Edit file `protected/config/db.php` kemudian sesuaikan dsn, user dan passwordnya. Misal untuk konek ke mysql, maka dsnnya adalah 'mysql:host=localhost;dbname=mydb'. Setelah koneksi terbentuk, maka kita bisa memakainya di kontroller, misalnya.

```
public function actionTampil()
{
    $sql = 'select * from user';
    $users = Dee::$app->db->queryAll($sql);
    return $this->render('tampil',['users' => $users]);
}

// kemudian di view tampil.php

            Id
            Username
            Full Name

```

Selain diakses langsung dari controller. Kita juga bisa membuat model untuk menangani input output database. Buat file `User.php` di folder `protected/models`.

```
namespace app\models;

class User
{
    public function getAll()
    {
        $sql = 'select * from user';
        return \Dee::$app->db->queryAll($sql);
    }

    public function addNew($user)
    {
        $sql = 'insert into user(username,fullname) values (:username,:fullname)';
        return \Dee::$app->db->execute($sql,[
            ':username' => $user['username'],
            ':fullname' => $user['fullname'],
        ]);
    }
}

// di controller
public function actionCreate()
{
    $model = new \app\models\User();
    $user = $_POST;
    $model->addNew($user);
}
```

Sql Builder
-----------

[](#sql-builder)

Untuk memudahkan penggunaan komponen database, maka beberapa fitur ditambahkan untuk membuat sintak sql sederhana.

### Where Builder

[](#where-builder)

```
$where = [
    'colom1' => 'nilai 1',
    'colom2' => [1, 2, 3],
    "colom3  5",
];
$params = [];
$conditions = Dee::$app->db->buildCondition($where, $params);
// maka variable $conditions dan $params akan bernilai
// $conditions = "(colom1 = :p1) AND (colom2 in (:p2,:p3,:p4)) AND (colom3  5)"
// $params = [':p1' => 'nilai 1', ':p2' => 1,  ':p3' => 2,  ':p4' => 3, ];
```

### Insert Builder

[](#insert-builder)

```
Dee::$app->db->insert('user', [
    'username' => 'mdmunir,
    'password' => md5($password),
    'company_id' => 1001,
]);
// akan memeksekusi sql
// INSERT INTO user(username, password, company_id) values(:p1, :p2, :p3);
// dengan $params = [':p1' => 'mdmunir', ':p2' => 'md5hash',  ':p3' => 1001 ];
```

### Update Builder

[](#update-builder)

```
Dee::$app->db->update('user', [
    'password' => md5($password),
], ['id' => 1]);
// akan memeksekusi sql
// UPDATE user SET password = :p1 WHERE (id = :p2);
// dengan $params = [':p1' => 'md5hash', ':p2' => 1];
```

### Delete Builder

[](#delete-builder)

```
Dee::$app->db->delete('user', ['id' => 1]);
// akan memeksekusi sql
// DELETE FROM user WHERE (id = :p1);
// dengan $params = [':p1' => 1];
```

Autoloader
==========

[](#autoloader)

Agar class-class dapat diload dengan benar, maka pastikan class-class yang ada memiliki namesapce yang bersesuaian dengan pathnya. Untuk class-class yang berada di bawah folder `protected`, maka root namespace-nya adalah `app`. Sub namespace-nya sesuai dengan folder class tersebut berada. Misal untuk class di bawah folder models, maka namespacenya adalah `app\models`.

###  Health Score

26

—

LowBetter than 41% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity16

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity49

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/9a5ba97416867dd2bff6c4e2fcd0e52f8b1f8bb7521dcef6b734636009ce834e?d=identicon)[mdmunir](/maintainers/mdmunir)

---

Top Contributors

[![mdmunir](https://avatars.githubusercontent.com/u/5828252?v=4)](https://github.com/mdmunir "mdmunir (59 commits)")

---

Tags

frameworkhacktoberfest

### Embed Badge

![Health badge](/badges/mdmunir-dee-app/health.svg)

```
[![Health](https://phpackages.com/badges/mdmunir-dee-app/health.svg)](https://phpackages.com/packages/mdmunir-dee-app)
```

###  Alternatives

[laravel/socialite

Laravel wrapper around OAuth 1 &amp; OAuth 2 libraries.

5.7k104.3M836](/packages/laravel-socialite)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k38.6M289](/packages/laravel-dusk)[nineinchnick/edatatables

Grid widget for the Yii Framework, wrapper for the DataTables jQuery plugin

173.2k](/packages/nineinchnick-edatatables)[link-cloud/fast-hyperf

LinkCloud Fast Hyperf

241.2k1](/packages/link-cloud-fast-hyperf)

PHPackages © 2026

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