dev-master
9999999-devSimple PHP Framework
BSD-3-Clause
The Requires
- php >=5.4.0
The Development Requires
by Misbahul D Munir
Wallogit.com
2017 © Pedro Peláez
Simple PHP Framework
Framework PHP dengan pola MVC. Cocok untuk media belajar cara kerja framework., (*1)
Download filenya dari sini, kemudian ekstak. Setelah itu buka command line, masuk ke folder hasil ekstraksi dan jalankan, (*3)
php init
include dan require.View templating. Beberapa halaman dapat berbagi layout yang sama.Buat class di folder protected/controllers dengan nama Hello.php., (*4)
namespace app\controllers;
class Hello extends \dee\base\Controller
{
public function actionIndex()
{
return $this->render('index', ['name'=>'World']);
}
}
dee\base\Controller..php.hello, maka nama classnya
adalah Hello. Jika nama routenya adalah hello-guys maka nama classnya adalah HelloGuys.Kemudian di folder protected/views/hello kita buat file index.php, (*5)
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.<?php
$js = <<<JS
$('#click-me').click(function(){
alert('Hello...');
});
JS;
$this->registerJs($js); // default di register ke jquery ready.
// opsi lainnya adalah $this->registerJs($js,View::POS_HEAD); atau $this->registerJs($js,View::POS_END);
$this->title = 'Contoh JS';
?>
<div>
<button id="click-me">Click Me</button>
</div>
Untuk mengakses halaman yang kita buat, urlnya adalah localhost/path/app/index.php/hello, (*8)
Meregister file js dapat dilakukan dengan mudah lewat Asset Package. Caranya, kita daftarkan paket kita di file config, (*9)
'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, (*10)
/* @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, (*11)
'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')., (*12)
Untuk membuat url yang lebih bersih (menghilangkan index.php) lakukan beberapa langkah berikut., (*13)
.htaccess.RewriteEngine on
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
showScriptName. Buka file protected/config/web.php. Ubah showScriptName menjadi false. Rest url dapat dibuat dengan mengisi setingan request->rules. Contoh:, (*14)
'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., (*15)
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., (*16)
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 |
|---|---|---|
| = $user['id']?> | = $user['username']?> | = $user['fullname']?> |
Selain diakses langsung dari controller. Kita juga bisa membuat model untuk menangani input output database.
Buat file User.php di folder protected/models., (*17)
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);
}
Untuk memudahkan penggunaan komponen database, maka beberapa fitur ditambahkan untuk membuat sintak sql sederhana., (*18)
$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, ];
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 ];
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];
Dee::$app->db->delete('user', ['id' => 1]);
// akan memeksekusi sql
// DELETE FROM user WHERE (id = :p1);
// dengan $params = [':p1' => 1];
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., (*19)
Simple PHP Framework
BSD-3-Clause