一个简单的 PHP-simple-mvc (提供基本的功能)

ps: 写的第一个,不足之处,欢迎拍砖

Github

---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说 模型中的toArray toJson setAttribute getAttribute)以此加深理解,提高自己

快速开始

git clone  https://github.com/jc91715/php-simple-mvc.git project

访问 your.domain.app/

路由 /xxxx/xxxxx

eg

/index/index  映射到 controllers/indexController 下的 index 方法

controller

在controllers文件下 继承自 basicController

eg

//controllers/indexController.php
<?php

class indexController extends basicController

{
    public function index()
    {

    }
}

数据库 配置在 config 文件夹下

eg

//config/database.php

return [
    'host' =>'localhost',
    'dbname' =>'demo4',
    'username' => 'homestead',
    'password' =>'secret'
];

model

在 model 文件夹下 继承 baseModel 提供 增删改查功能

eg

//model/userModel.php
<?php

class userModel extends baseModel
{
   $table='users';
}

如何使用

$user=new userModel()

$user->find($id)

$user->get()

$user-create($arrayData)

$user->update($arrayData,$id) or $user->find(1)->update($arrayData) or 
$user=$user->find($id) 
$user->name=xxxx
$user->save()

$user->delete($id)

//转换为数组
   $user->find($id)->toArray()
 //转换为json
 $user->toJson()

//提供了两个简单的hook 如果你取出数据之前需要对数据进行格式化 eg

public function getName($val)
{

    return ucwords($val);
}

//如果你插入数据之前需要对数据进行格式化(一个字段需要是json格式的) eg

public function setName($val)
{
    return json_encode($val);
}

//后续可能会有 beforeUpdate() afterUpdate  beforeCreate afterCreate 等等

//如果你想在laravel 试试(只是试试而已~~) 可以让 user 继承 baseModel 在构造函数中手动配置下数据库就可以了
//$config = include 'config/database.php';
$this->dbh = new PDO(
            "mysql:host=localhost;dbname=xxxx", 'username', 'password']
            , [PDO::ATTR_PERSISTENT => true]
        );

view

支持原生 php 模板(默认推荐) 和 自定义 html模板(正则匹配是 是从php核心技术与最佳实践上引用的)

ps: 找不到原生模板的情况下会去找 自定义模板

//不推荐使用
//模板标签
{$var}

{foreach $arr}
    {$V}
{/foreach}

{if}

{endif}

1 在控制其中使用

eg

//controllers/indexController
<?php

 class indexController extends basicController

    {
        public function index()
        {
            $title='index done'
            view('index');//加载 view/php/index.view.php

            view('index/index');//加载 view/php/index/index.view.php

            view('index',compact('title'));//传递变量 $title 到视图上

        }
    }

2 在视图中使用(为了代码重用 包含header 和 footer等等需要重用的文件)

eg

// view/php/index.view.php

<?php view('common/header', compact('title')); ?> //包含 view/php/common/header.view.php 并传递数据(compact('title') 是从控制器传递过来的)

//view/php/common/header.view.php

 <title>jc91715-php-simple-mvc <?php echo $title;?></title>

提供widget

等等 widget 有什么用

不是有 view 么

请 瞅一下这里 @leo

使用widget

必须继承 basicWidget.php 并实现 display 方法

eg

// widget/indexWidget.php

<?php

class indexWidget extends basicWidget
{
    public function display($val){
        //$val 是从视图传过来的值
       return  "widget/index/index.widget加载成功(我是从view传过来的经过了widget的处理) ";
    }
}

在视图中调用

//view/php/index.widget.php

<?php w('index', $title) ?>//加载 widget/index/index.widget.php
<?php w('index.test', $title) ?>//加载 widget/index/test.widget.php

END

本作品采用《CC 协议》,转载必须注明作者和本文链接
Make everything simple instead of making difficulties as simple as possible
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!