v1.4.0 2023-07-06 07:10 UTC

This package is auto-updated.

Last update: 2024-09-06 09:53:18 UTC


README

这是一个简单的PHP MVC框架,没有太多你不需要的依赖。

支持

  1. PHP 7^
  2. MYSQL
  3. MSSQL
  4. SQLite

入门指南

  1. 下载最新版本或通过composer安装[composer create-project vgalvoso/spm]。
  2. 在app/Config/Database.php中配置你的数据库。
  3. 确保项目位于你的Web服务器根目录内。
  4. 现在你可以创建控制器、视图和模型。

路由

在SPM中创建路由很容易。

打开routes.php。

添加你的新路由。

//routes.php
use App\Controller\Home;

get('',Home::class,"index");

要从POST请求中获取数据,使用post()函数

//routes.php
use App\Controller\Home;

//post(route name,class,static function to call)
post('post',Home::class,"samplePost");

要从GET请求中获取数据,使用get()函数

//routes.php
use App\Controller\Home;

//get(route name,class,static function to call)
get('get',Home::class,"sampleGet");

要调用命令行,使用cli()函数

//routes.php sample
cli('comand',Command::class,"executeCommand");

控制器

控制器响应超链接、表单操作和URL输入。

  • 控制器存储在app/Controller
  • 控制器类名必须与文件名相同。

让我们为Home控制器中的"post"路由创建一个函数。

public static function samplePost($post_data){
    //now you can get values from POST request
    //sample: $username = $post_data["username"];
}

还有我们的"get"路由。

public static function sampleGet($get_data){
    //now you can get values from GET request
    //sample: $id = $get_data["user_id"];
}

视图

视图向用户显示信息。

  • 视图存储在app/Views
  • 使用snake case命名视图(示例:main_page.php)
  • 你可以创建子文件夹来组织你的视图文件。

让我们为Home控制器(home路由)使用我们的视图。

//app/Controller/Home.php
public static function index()
{
    view("section/header");
    view("home");
    view("section/footer");
}

你可以向视图传递数据。(必须是关联数组)

//app/Controller/Home.php
public static function index()
{
    $data = ["header" => "Simple MVC Framework",
            "sub_header" => "Just what you need!"];
    view("section/header");
    view("home",$data);
    view("section/footer");
}

数组的键将被转换为可以在视图中使用的变量

//Views/home.php
<div class="full-screen column center">
    <h1 class="text-banner center-text"> <?= $header ?> </h1>
    <h1 class="text-header"> <?= $sub_header ?> </h1>
</div>

模型

模型用于CRUD(创建、更新、删除)操作,SPM使这变得简单。

  • SPM目前支持事务性数据库(MySql和MsSql)。
  • 模型存储在app/Model
  • 模型继承自app/Libraries/Model.php

初始化我们的模型

当我们不放置参数时,我们的模型将使用默认数据库。

//app/Controller/Home.php
$home_model = new HomeModel();

使用在app/Config/Database.php中配置的其他数据库

//app/Controller/Home.php
$home_model = new HomeModel("ms");

我们也可以使用在Database.php中未声明的其他数据库

//app/Controller/Home.php
$home_model = new HomeModel(null,$host,$user,$pass,$dbname,$driver(mysql/mssql));

选择单个项目

//app/Model/HomeModel.php
public function getUser(){
    $query = "SELECT * FROM users WHERE id = 1";
    return $this->getItem($query);
}

选择多个项目

//app/Model/HomeModel.php
public function getAllUsers(){
    $query = "SELECT * FROM users";
    return $this->getItems($query);
}

防止SQL注入

//app/Model/HomeModel.php
public function validateUser($username,$password){
    $query = "SELECT * FROM users WHERE username = :uname AND pass = :pass";
    $params = ["uname" => $username, "pass"=>$password];
    return $this->getItem($query,$params);
}

要插入数据,创建一个关联数组,并使用表字段名作为数组键

//app/Model/HomeModel.php
public function addUser($username,$password,$firstname){
    $params = ["u_username"=>$username,
            "u_password"=>password_hash($password,PASSWORD_DEFAULT),
            "firstname"=>$firstname];
    if($this->insert("users",$params))
        return true;
    return false;
}

要删除数据,使用exec()函数

//app/Model/HomeModel.php
public function deleteUser($userId){
    $params = ["id" => $userId];
    $query = "DELETE FROM users WHERE id = :id";
    $this->exec($query,$params);
}

要更新数据,使用exec()函数

//app/Model/HomeModel.php
public function updateUser($firstname,$userId){
    $query = "UPDATE users SET firstname = :firstname WHERE id = :userId";
    $params = ["firstname" => $firstname,"userId"=>$userId];
    return $this->exec($query,$params);
}

开始事务

//inside your model
$this->startTrans();

提交

$this->commit();

回滚

$this->rollback();

每次我们使用我们的模型函数并且它失败时,我们都可以获取错误

$this->getError();

我们还可以看到我们目前正在使用的数据库驱动程序

$this->getDriver();

我们还可以获取最后插入的ID

$this->lastId();