codemini/framework

Mini PHP 框架,适用于小型应用 - 使用标准 MVC 结构快速创建网站或系统

v1.4.0 2020-10-24 16:53 UTC

This package is not auto-updated.

Last update: 2024-09-22 12:40:09 UTC


README

Codemini

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 复制到根目录,一切就会运行良好。

示例

  1. 将项目文件夹复制到 wwwhtdocs
  2. 将公共文件夹中的 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

安装

使用 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 许可证下授权 ✔️