vgalvoso / spm
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框架,没有太多你不需要的依赖。
支持
- PHP 7^
- MYSQL
- MSSQL
- SQLite
入门指南
- 下载最新版本或通过composer安装[composer create-project vgalvoso/spm]。
- 在app/Config/Database.php中配置你的数据库。
- 确保项目位于你的Web服务器根目录内。
- 现在你可以创建控制器、视图和模型。
路由
在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();