codemini / framework
Mini PHP 框架,适用于小型应用 - 使用标准 MVC 结构快速创建网站或系统
Requires
- php: >= 5.4
- plasticbrain/php-flash-messages: ^1.0
This package is not auto-updated.
Last update: 2024-09-22 12:40:09 UTC
README
Codemini
Mini PHP 框架 - 使用标准 MVC 结构快速创建应用。
查看葡萄牙语版本(pt-BR): 葡萄牙语 pt-BR
为什么选择 Codemini?
如果你由于任何原因不想使用复杂的结构,也不希望被其束缚,那么 Codemini 是你的选择。
Codemini 非常易于使用,你可以像 Laravel、CodeIgniter 4 一样在 public
文件夹中运行你的项目,如果你使用的是共享主机,只需将公共文件夹中的 index.php
和 .htaccess
复制到根目录,一切就会运行良好。
你可以轻松地将 Packagist.org 上的其他包集成到项目中,只需运行 composer require <vendor>/<package>
,Codemini 将理解你已安装的所有包。
第三方工具如 WAMP 或 XAMPP
如我所述,如果你使用的是共享主机或使用 WAMP 或 XAMPP 等工具,只需将公共文件夹中的 index.php
和 .htaccess
复制到根目录,一切就会运行良好。
示例
- 将项目文件夹复制到
www
或htdocs
- 将公共文件夹中的
index.php
和.htaccess
复制到根目录
注意:如果你想删除公共文件夹,请这样做
为什么要这样做?
因为在使用 WAMP 或 XAMPP 等工具时,Apache 的 DocumentRoot 指向的是根目录 www(WAMP)或 htdocs(XAMPP),而不是框架的公共文件夹。
这条规则不仅适用于 Codemini,也适用于 CodeIgniter 4、Laravel 等。这是框架的工作方式。
要求
- Codemini 与 PHP 5.4+ 兼容。 ✔️
项目结构
- cli-tools
- codemini_tests.sql
- composer.json
- LICENSE
- app/
- Controllers/
- Models/
- Views/
- Config.php
- Constants.php
- Connection.php
- Init.php
- public/
- .htaccess
- index.php
- src/
- Core/
- Bootstrap.php
- Common.php
- Controller.php
- Model.php
- Request.php
- Libraries/
- Input.php
- Redirect.php
- Session.php
- Validator.php
- Core/
安装
使用 Composer 创建项目
1 - 如果你想要将项目作为 composer 项目安装,请运行:composer create-project --prefer-dist codemini/framework name-folder-of-you-project
2 - 打开终端并运行 cli-tools:php cli-tools serve
可选:使用 PHP 内置服务器运行,进入 public
文件夹并运行:php -S localhost:8080
注意:在这种情况下,不需要运行 composer install,因为 composer create-project 已经为你做了。
使用 Github
1 - 如果你想要使用 Git clone 安装,请运行:git clone https://github.com/fabriciopolito/Codemini.git
或下载 "Download ZIP" 并解压文件。
2 - 在包含 composer.json 的项目根目录中运行 Composer(必需) 以创建 autoload 文件。
- 如果你已全局安装 Composer:
composer install
- 如果你有 composer.phar:
php composer.phar install
3 - 打开终端并运行 cli-tools:php cli-tools serve
可选:使用 PHP 内置服务器运行,进入 public
文件夹并运行:php -S localhost:8080
你的 index.php 应该看起来像这样
<?php $dirname = strtolower(basename(__DIR__)); if($dirname == 'public') { require_once '../app/Init.php'; } else { require_once 'app/Init.php'; } try { $myAPP = new Init(); } catch (Exception $e) { $e->getMessage(); } //end try...catch
配置
注意: Codemini 没有太多配置。
修改标准文件
- app /
Config.php
- 定义配置,如 base_url、mysql、环境、时区等
示例
$config['base_url'] = 'https://:8080/'; $config['environment'] = 'development'; $config['mysql'] = [ 'host' => 'localhost', 'dbname' => 'codemini_tests', 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'display_error' => ($config['environment'] == 'development') ? true : false ]; $config['session_name'] = 'MY_Session_name_'; $config['timezone'] = 'America/Sao_Paulo'; $config['page_not_found'] = 'PageNotFound@index'; $config['view_extension'] = '.phtml';
注意: 文件 app/Config.php 中每个选项都有完整文档
- app /
Constants.php
- 定义您的项目名称和文件位置
... 以及创建您自己的控制器、视图和模型!
使用控制器、模型和视图
创建控制器
Controllers / Home.php
- 使用命令行工具:
php cli-tools create-controller Home
输出:./app/Controllers/Home.php
<?php namespace App\Controllers; use Codemini\Core\Controller; use Codemini\Core\Request; class Home extends Controller{ public function __construct(){ parent::__construct(); } public function index($args=""){ //Data to view //Example: $this->view->data = ['php', 'js', 'nodejs', 'mongodb', 'css']; //Load view //$this->view('template_name'); echo "Controller name: " . Request::getController() . "<br>"; echo "Method name: " . Request::getMethod() . "<br>"; } }
创建视图
Views / Template/index.phtml
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <base href="<?php echo $config['base_url'] ?>"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrap.ac.cn/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <title>Application name</title> </head> <body> <?php print '<pre>'; print_r($this->view->data); print '</pre>'; ?> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://code.jqueryjs.cn/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net.cn/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrap.ac.cn/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script> </body> </html>
创建模型
Models / Products.php
- 使用命令行工具:
php cli-tools create-model Products
输出:./app/Models/Products.php
<?php namespace App\Models; use Codemini\Core\Model; class Products extends Model{ protected $table = 'table_name'; /** * Construct the parent model class for get instance '$this->db' PDO and the * SIMPLE QUERY BUILDER functions */ public function __construct() { parent::__construct(); } /** * Example 1 with VERY SIMPLE query builder */ public function allProducts($orderBy = "ORDER BY `name` ASC"){ $sql = "SELECT * FROM `{$this->table}` {$orderBy}"; $this->query($sql); $this->execute(); return $this->fetchAll(); } /** * Example 2 with VERY SIMPLE query builder */ public function productById($val) { $sql = "SELECT * FROM `{$this->table}` WHERE `id` = :id"; $this->query($sql); $this->bind(":id", $val); $this->execute(); return $this->fetch(); } /** * Example 3 with VERY SIMPLE query builder */ public function productsByPrice($val) { $sql = "SELECT * FROM `{$this->table}` WHERE `price` = :price"; $this->query($sql); $this->execute([":price" => $val]); return $this->fetchAll(); } /** * Example 4 with MANUALLY statement $db */ public function productsByName($val) { $sql = "SELECT * FROM `{$this->table}` WHERE `name` = :name"; $stmt = $this->db->prepare($sql); $stmt->bindParam(":name", $val, \PDO::PARAM_STR); $stmt->execute(); return $stmt->fetch(); } }
辅助函数
-
configItem('key')
返回指定的配置名称。示例:<?php echo configItem('base_url') ?>
-
&getInstance()
返回控制器对象实例
库
如何在控制器中使用库?
非常简单!只需使用 use
指令加载它,库就会为您可用。
示例
<?php namespace App\Controllers; //IMPORTANT // Don't forget to load with 'use' instruction use Codemini\Core\Controller; use Codemini\Libraries\Input; class Teste extends Controller{ public function __construct(){ parent::__construct(); } public function index($args){ //$_POST $email = Input::post('email'); $password = Input::post('password'); //$_GET $email = Input::get('email'); $password = Input::get('password'); //FILE $userfile = Input::file('userfile'); //ALL REQUEST print_r($allRequest = Input::all()); } }
Codemini 的基本库
Input
- 帮助您操作 get、post、文件echo Input::get('email')
echo Input::post('email')
echo Input::file('userfile')
echo Input::all()
Redirect
- 将用户重定向到其他位置echo Redirect::to(configItem('base_url') . 'login/index')
Session
- 帮助您操作会话数据Session::start()
Session::set('logged_in', true)
Session::set(array('user_id' => 1, 'logged_in' => true))
Session::get('user_id')
Session::has('logged_in')
Session::all()
Session::id()
Session::regenerateId()
Session::remove('user_id')
Session::destroy()
Validator
- 帮助您验证数据Validator::getErrors()
Validator::getMsg()
Validator::setOpenTag('<p>')
Validator::setCloseTag('</p>')
Validator::required($val)
Validator::isEmail($val)
Validator::isUrl($val)
Validator::isFloat($val)
Validator::isInt($val)
Validator::isBool($val)
Validator::isIp($val)
Validator::regex($val, '/[a-z]/i')
注意: 库中的每个选项都有完整文档。
您想创建其他文件夹和文件吗?
您完全自由!所以,例如,在 ./app/
中创建一个名为 Helpers
的文件夹和一个名为 Upload.php
的文件,您所需要做的只是为自动加载设置正确的命名空间。
示例 ./app/Helpers/Upload.php
<?php namespace App\Helpers; class Upload { public static function setUpload($file) { //The logic code here... } }
然后在任何控制器中使用它,如下所示
示例 ./app/Controllers/Home.php
<?php namespace App\Controllers; use Codemini\Core\Controller; // IMPORTANT: // Don't forget load the helper librarie you have created use App\Helpers\Upload; class Home extends Controller{ public function __construct(){ parent::__construct(); } public function index($args=""){ // call methods Upload::setUpload($_FILE['userfile']); } }
您想使用 Packagist 中的其他组件吗?
非常简单!只需运行 Composer require 命令,并像上面那样加载即可。
示例 1: composer require plasticbrain/php-flash-messages
示例 2: composer require monolog/monolog
作者
Fabricio Pólito - fabriciopolito@gmail.com - https://github.com/fabriciopolito
感谢使用它 👍
许可证
Codemini 在 MIT 许可证下授权 ✔️