mdmunir/dee-app

简单的 PHP 框架

维护者

详细信息

github.com/mdmunir/dee

源代码

问题

安装: 6

依赖: 0

建议者: 0

安全: 0

星级: 21

关注者: 7

分支: 12

开放问题: 1

类型:项目

dev-master / 1.0.x-dev 2021-10-14 15:05 UTC

README

PHP MVC 模式框架。适合学习框架工作原理的媒体。

Latest Stable Version Latest Unstable Version Build Status License

安装

这里下载文件,然后解压。之后打开命令行,进入解压后的文件夹并运行

php init

特性

  • 使用 MVC 模式。
  • 使用自动加载。最小化使用 includerequire
  • 视图模板。一些页面可以共享相同的 layout
  • 使用 PDO 连接数据库。
  • 注册 js 和 css。
  • 资产包。
  • 清洁 URL。
  • 支持 URL 规则/路由。可以用于构建 REST 应用程序。
  • 控制台应用程序。
  • 以及其他。

使用方法

创建控制器。

protected/controllers 文件夹中创建一个名为 Hello.php 的类。

namespace app\controllers;

class Hello extends \dee\base\Controller
{
    public function actionIndex()
    {
        return $this->render('index', ['name'=>'World']);
    }
}
  • 注意大小写。控制器类必须是 dee\base\Controller 类的子类。
  • 类名必须与文件名相同,以 .php 结尾。
  • 类名使用驼峰命名法(首字母大写)。例如,如果路由是 hello,则类名为 Hello。如果路由名为 hello-guys,则类名为 HelloGuys

创建视图。

然后在 protected/views/hello 文件夹中创建一个名为 index.php 的文件。

<div class="hello">
    <div class="jumbotron">
        <h1>Welcome!</h1>

        <p class="lead">Hello <?= $name; ?>.</p>

        <p><a href="https://mdmunir.wordpress.com" class="btn btn-lg btn-success">Get started</a></p>
    </div>
</div>
  • 视图文件夹与控制器 ID 一致。
  • 如果控制器 ID 是 hello,则视图位于 protected/views/hello 文件夹中。同样,如果控制器 ID 是 hello-guys,则视图位于 protected/views/hello-guys 文件夹中。
  • 我们还可以在视图中插入 JavaScript 代码。例如
<?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>

要访问我们创建的页面,URL 是 localhost/path/app/index.php/hello

资产包

可以通过 Asset Package 简单地注册 js 文件。方法是,我们在配置文件中注册我们的包

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

然后,在视图中,我们可以通过注册它来使用该包

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

$this->registerPackage('bootstrap');

目前可用的核心包是 jquery,指向 //code.jqueryjs.cn/jquery-2.2.4.min.js。您可以使用自己的 jQuery,通过修改其配置来实现

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

POS_READYPOS_LOAD 中注册 JavaScript 时,jquery 包将自动可用。或者,您可以手动注册,通过在视图中调用它 $this->registerPackage('jquery')

清洁 URL

要创建更干净的 URL(移除 index.php),请执行以下步骤。

  • 创建文件 .htaccess
RewriteEngine on
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
  • 更改 showScriptName 设置。打开文件 protected/config/web.php。将 showScriptName 更改为 false

REST URL

可以通过填充 request->rules 设置来创建 REST URL。例如

'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',
]

然后我们创建 ProductController 控制器并实现 actionIndex()actionView() 等操作。

数据库连接

编辑文件 protected/config/db.php,然后调整 dsn、用户和密码。例如,连接到 mysql,dsn 为 'mysql:host=localhost;dbname=mydb'。连接建立后,我们可以在控制器中使用它,例如。

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

// kemudian di view tampil.php
<table>
    <thead>
        <tr>
            <th>Id</th>
            <th>Username</th>
            <th>Full Name</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach($users as $user): ?>
        <tr>
            <td><?= $user['id']?></td>
            <td><?= $user['username']?></td>
            <td><?= $user['fullname']?></td>
        </tr>
        <?php endforeach ?>
    </tbody>
</table>

除了直接从控制器访问之外,我们还可以创建模型来处理数据库的输入输出。在 protected/models 文件夹中创建 User.php 文件。

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 构建器

为了方便使用数据库组件,添加了一些功能来简化SQL语句的编写。

Where构造器

$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构造器

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构造器

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构造器

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

自动加载器

为了确保类能够正确加载,请确保类具有与路径匹配的命名空间。对于位于protected文件夹下的类,其根命名空间为app。子命名空间根据该类所在的文件夹来设置。例如,对于位于models文件夹下的类,其命名空间为app\models