anzeblabla / simplite
一个非常简单且轻量级的PHP框架。
0.5
2024-07-03 10:43 UTC
Requires
- php: >=8.1.0
- composer-runtime-api: ^2.2
README
这是一个非常简单的PHP框架,使实现PHP网站变得更加容易和快速。
功能
TODO:编写
待办事项
- 编写更好的文档
- 编写测试
- 重做处理GET和POST参数的方式
- 路由器与尾部斜杠不一致(CSS和JS包含会中断)- 应该始终重定向到带有尾部斜杠的地址
- 使用COMPONENT_ID替换组件块时可能出现的ID重复问题
- 在页面渲染之前布局可能出现的问题。可能会潜在地导致在用户尚未检查是否登录的情况下使用用户的问题。
- 自动加载器
- 表注释
发布
https://medium.com/@mazraara/create-a-composer-package-and-publish-3683596dec45
使用示例
composer require anzeblabla/simplite
文件夹结构
app/
pages/
index.php
users/
[id]/
index.php // user profile
index.php // list of users
components/ # reusable components (\AnzeBlaBla\Simplite\Renderer::component($componentName))
header.php
footer.php
models/ # Database models, inheriting from \AnzeBlaBla\Simplite\ModelBase
User.php
index.php
index.php
<?php require_once __DIR__ . '/vendor/autoload.php'; use \AnzeBlaBla\Simplite\Application; $app = new Application([ 'root_directory' => __DIR__ . '/app', 'db' => [ 'host' => $_ENV['MYSQL_HOST'], 'dbname' => $_ENV['MYSQL_DATABASE'], 'username' => $_ENV['MYSQL_USER'], 'password' => $_ENV['MYSQL_PASSWORD'], ], 'component_comments' => true, // wrap components in HTML comments ]); $app->addContext([ 'logged_in' => isset($_SESSION['user_id']), 'user_id' => $_SESSION['user_id'] ?? null ]); if (isset($_SESSION['user_id'])) { $app->addContext([ 'user' => [] // TODO: get user from database ]); } $app->render();
示例模型
<?php use AnzeBlaBla\Simplite\ModelBase; use PHPMailer\PHPMailer\PHPMailer; class User extends ModelBase { /** * @SimpliteProp int * @SimplitePK * @SimpliteAutoIncrement */ public int $id; /** * @SimpliteProp */ public string $username; /** * @SimpliteProp */ public string $password; /** * @SimpliteProp */ public string $email; /** * Email confirmation code * @SimpliteProp */ public string $confirm_code; /** * If user has confirmed their email address * @SimpliteProp * @SimpliteDefault 0 */ public int $confirmed_email; /** * @SimpliteProp timestamp * @SimpliteDefault CURRENT_TIMESTAMP */ public string $created_at; /** * @SimpliteProp timestamp * @SimpliteDefault CURRENT_TIMESTAMP * @SimpliteOnUpdate CURRENT_TIMESTAMP */ public string $updated_at; public function get_read_books($limit = null) { $limit_str = $limit ? "LIMIT $limit" : ""; $books = ReadBook::find("user_id = ? ORDER BY created_at DESC $limit_str", [$this->id]); $ids = array_map(function ($book) { return $book->book_id; }, $books); return Book::constructMany($ids); } public function update_read_book($book_id, $read = true) { if ($read) { if (count(ReadBook::find("user_id = ? AND book_id = ?", [$this->id, $book_id])) > 0) { return; } $rb = new ReadBook([ 'user_id' => $this->id, 'book_id' => $book_id, ]); $rb->create(); } else { $rb = ReadBook::find("user_id = ? AND book_id = ?", [$this->id, $book_id]); if ($rb) { $rb[0]->delete(); } } } public function has_read_book($book_id) { return count(ReadBook::find("user_id = ? AND book_id = ?", [$this->id, $book_id])) > 0; } }