kecik / kecik
Kecik 框架,微框架
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-09-28 16:51:53 UTC
README
Bank Mandiri: 113-000-6944-858, 收款人: Dony Wahyu Isprananda
这是一个具有非常简单文件系统的框架,因此这不是一个复杂的框架,但你可以将此框架构建和开发成一个复杂的框架。此框架支持简单的 MVC,你需要自定义一些代码以获得复杂的 MVC,对于模型只需生成用于 INSERT
、UPDATE
和 DELETE
的 SQL 查询,因此对于执行此 SQL 查询的代码,请根据您的需求自由操作或使用任何数据库库。此框架也支持 Composer,以便于您从 composer 中添加库。
Name : Framework Kecik
Author : Dony Wahyu Isp
Version : 1.1.0
Country : Indonesian
City : Palembang
快速入门
更多
了解更多 | 头部 | 路由 | 配置 | 资产 | 请求 | MVC | 控制器 | 中间件 | 模型 | 视图 | URL | 模板
第一步
在您的操作系统中安装 composer,如果尚未安装,您可以从 Composer 网站下载它,下载并初始化后,接下来您需要创建 composer.json 文件,内容如下。
{ "require": { "kecik/kecik": "1.1.*@dev" } }
接下来,在控制台/命令行中运行此命令
composer install
等待一分钟,直到所有操作都无错误运行。
第二步
创建 index.php 文件或任何其他文件,并输入以下代码
<?php require_once "Kecik/Kecik.php"; // or for composer require_once "vendor/autoload.php";
require "Kecik\Kecik.php"
以将框架的系统文件包含到您要创建的项目中。然后尝试运行,如果只显示空白页面且没有错误消息,则表示成功。
有关如何使用 composer 的说明将不会在此处讨论,您可以从 composer 网站的在线和离线文档中学习。
第三步
从 Kecik 类创建以下变量
$app = new Kecik\Kecik();
然后尝试重新运行,如果没有错误发生,则表示您已成功完成此步骤。
第四步
下一步是创建用于 index 的路由并运行框架,以下代码
$app->get('/', function() { return 'Hello Kecik'; }); $app->run();
编写代码后尝试运行,这样你可以看到 "Hello Kecik",这意味着你已成功为项目的路由索引/主页创建视图。
整体外观代码
<?php require_once "Kecik/Kecik.php"; // or for composer //require_once "vendor/autoload.php" $app = new Kecik\Kecik(); $app->get('/', function() { return 'Hello Kecik'; }); $app->run();
了解更多
头部
头部用于设置响应头
$app->get('hello', function() { $this->header(200); return 'Hello Kecik'; });
路由
路由包含Kecik框架当前的是get和post,get和post是请求源,这意味着路由只会处理匹配的请求。如何使用,有几种方式,最简单的是不使用控制器、外部变量和模板,如下所示
$app->get('/', function() { return 'Hello Kecik'; });
带参数
$app->get('hello/:name', function ($name) { return 'Hello '.$name; });
路由中的参数使用 :
在前端部分,而对于可选参数可以使用 (:)
示例: hello/(:name)
带控制器
$app->get('welcome/:name', new Controller\Welcome($app), function ($controller, $name) use ($app) { return $controller->index($name); });
确保已经为该路由创建了要使用的控制器。
带模板
$app->get('hello/:name', function ($name) { return 'Hello '.$name; })->template('template_kecik'); $app->get('welcome/:name', new Controller\Welcome($app), function ($controller, $name) use ($app) { return $controller->index($name); })->template('template_kecik'); $app->get('welcome/:name', function($name) { $controller = new Controller\Welcome($this); return $controller->index($name); })->template('template_kecik');
####分组 Kecik框架也支持路由分组。
$app->group('book', function() { $this->post('insert', function() { $controller = new Controller\Book($this); return $controller->insert(); }); $this->get('get', function() { $controller = new Controller\Book($this); return $controller->get(); }); $this->post('update', function() { $controller = new Controller\Book($this); return $controller->update(); }); $this->post('delete', function() { $controller = new Controller\Book($this); return $controller->delete(); }); $this->post('find', function() { $controller = new Controller\Book($this); return $controller->find(); }); });
HTML仅支持方法 POST
和 GET
,如果我们想使用像 PUT
、DELETE
、OPTIONS
和 PATCH
这样的方法,我们可以使用 Override
<form method="POST" action="<?php $this->url->to('login') ?>"> <label>Username</label> <input type="text" name="username" /> <label>Password</label> <input type="password" name="password" /> <input type="hidden" name="_METHOD" value="PUT"> <input type="submit" value="LOGIN" /> </form
注意:适用于使用post、put、delete、options和patch时,控制器和模板的使用有多个步骤需要准备
####is() 获取当前路由的值
<a href="<?php $this->url->to('home') ?>" <?php echo ($this->route->is() == 'home')? 'class="active"': '' ?>>Home</a>
####isPost() 检查请求方法是否为 POST
,如果是,则值为 TRUE
,否则为 FALSE
。
if ($this->route->isPost() == FALSE) $this->header(404);
####isGet() 检查请求方法是否为 GET
,如果是,则值为 TRUE
,否则为 FALSE
。
if ($this->route->isGET() == FALSE) $this->header(404);
####isPut() 检查请求方法是否为 PUT
,如果是,则值为 TRUE
,否则为 FALSE
。
if ($this->route->isPut() == FALSE) $this->header(404);
####isDelete() 检查请求方法是否为 DELETE
,如果是,则值为 TRUE
,否则为 FALSE
。
if ($this->route->isDelete() == FALSE) $this->header(404);
####isPatch() 检查请求方法是否为 PATCH
,如果是,则值为 TRUE
,否则为 FALSE
。
if ($this->route->isPatch() == FALSE) $this->header(404);
####isOptions() 检查请求方法是否为 OPTIONS
,如果是,则值为 TRUE
,否则为 FALSE
。
if ($this->route->isOptions() == FALSE) $this->header(404);
####isAjax() 检查请求方法是否为 AJAX
,如果是,则值为 TRUE
,否则为 FALSE
。
if ($this->route->isAjax() == FALSE) $this->header(404);
第一次
设置路径或位置以用于资产、应用程序(MVC)和模板,按照以下方式设置
$app->config->set('path.assets', 'assets'); $app->config->set('path.mvc', 'app'); $app->config->set('path.template', 'templates');
第二次
在设置路径之前创建一个文件夹/目录。
第三次
对于资产和应用程序的文件夹/目录,确保其中包含子文件夹/目录
+-- assets
| +-- css
| +-- js
| +-- images
+--app
| +-- controllers
| +-- models
| +-- views
配置
对于大型项目且不简单,我们需要一些设置/配置,为此框架也配备了config,无论是用于设置还是读取设置
####set()
使用config中的set函数来设置/添加值
set($key, $value)
参数
$key
是设置参数的键参数
$value
是设置参数的值
示例
$app->config->set('path.assets', 'assets');
####get()
使用get函数从设置中获取值
get($key)
参数
$key
是要获取值的设置参数的键
示例
$asset_path = $app->config->get('path.assets');
创建Kecik实例时的配置
$config = [ 'path.assets' => 'assets', 'path.mvc' => 'app', 'path.template' => 'templates', 'error.404' => 'kecik_template/404', 'mod_rewrite' => TRUE, 'libraries' => [ 'DIC' => ['enable'=>TRUE], 'Session' => [ 'enable' => TRUE, 'config' => ['encrypt' => TRUE] ], 'Cookie' => [ 'enable' => TRUE, 'config' => ['encrypt' => TRUE] ], 'Database' => [ 'enable' => TRUE, 'config' => [ 'driver' => 'mysqli', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'dbname' => 'kecik' ] ], 'MVC' => ['enable' => TRUE], 'Language' => [ 'enable' => TRUE, 'params' => [ 'id' => 'language/lang_id.json', 'us' => 'language/lang_us.json' ] ] ] ]; $app = new Kecik\Kecik($config); $app->get('/', function() { return 'Hello Kecik'; }); $app->run();
资产
资产对于方便我们添加/删除css、js和图片等资产非常重要,对于模板也非常有用,而且资产也可以通过使用的控制器进行调整。css和js具有相同的结构,而图片则不同。####add()
此函数用于添加css或js等资产文件。
add($file='')
参数
$file
包含要加载的资产文件的名称,无需使用扩展名
示例
$app->assets->css->add('boostrap'); $app->assets->js->add('jquery.min');
####delete()
此函数用于删除要加载的css或js等资产文件。
delete($file='')
参数
$file
包含要加载的资产文件的名称,无需使用扩展名
示例
$app->assets->css->delete('boostrap'); $app->assets->js->delete('jquery.min');
####render()
该函数用于渲染资产列表或想要以CSS或JS加载的单个资产。
render($file='')
参数
$file
包含要加载的资产文件的名称,无需使用扩展名
示例
echo $app->assets->css->render(); echo $app->assets->js->render(); // atau spesifik render echo $app->assets->css->render('boostrap'); echo $app->assets->js->render('boostrap.min');
####images()
该函数用于获取图像资产文件的链接。
images($file)
参数
$file
包含要使用的图像资产文件名。
示例
<img src="<?php echo $app->assets->images('kecik.jpg'); ?>" />
####url()
该函数用于获取图像资产的文件链接。
url()
请求
请求来自 $_GET
、$_POST
和 $_SERVER
。
####get()
您可以使用 get 函数从 $_GET
获取值。
get($var='')
参数
$var
包含获取变量的名称。
示例
print_r($this->request->get()); $x = $this->request->get('x');
post()
您可以使用 post
函数从 $_POST
获取值。
post($var='')
参数
$_var
包含 post 变量的名称。
示例
print_r($this->request->post()); $x = $this->request->post('x');
put()
您可以使用 put
函数从 PUT
获取值。
put($var='')
参数
$var
包含 put 变量的名称。
示例
print_r($this->request->put()); $x = $this->request->put('x');
delete()
您可以使用 delete
函数从 DELETE
获取值。
delete($var='')
参数
$var
包含 delete 变量的名称。
示例
print_r($this->request->delete()); $x = $this->request->delete('x');
options()
您可以使用 options
函数从 OPTIONS
获取值。
options($var='')
参数
$var
包含 post 变量的名称。
示例
print_r($this->request->options()); $x = $this->request->options('x');
patch()
您可以使用 patch
函数从 PATCH
获取值。
patch($var='')
参数
$var
包含 post 变量的名称。
示例
print_r($this->request->patch()); $x = $this->request->patch('x');
####file() 您可以使用 file
函数从 $_FILE
获取值
file($file)
参数
$file
包含FILES
变量的名称。
示例
$x = $this->request->file('photo')->move($source, $destination);
####server()
您可以使用 server 函数从 $_SERVER
获取值。
server($var='')
参数
$var
包含服务器变量的名称。
示例
print_r($this->request->server()); $host = $this->request->server('HTTP_HOST');
MVC
此框架还支持简单的 MVC,其中路由将调用控制器,控制器将调用模型或/和视图。
控制器
为了使控制器简单,我们只需创建一个与控制器名称相同的文件,并将其保存在通过配置预先设置的目录中。以下是一个简单的控制器代码。
<?php // file welcome.php namespace Controller; use Kecik\Controller; class Welcome extends Controller{ public function __construct() { parent::__construct(); } }
在路由中使用控制器的方法如下
$app->get('/', new Controller\Welcome(), function($controller) { });
- 带有参数 要在路由中使用控制器参数,也很简单,只需将参数添加到构造函数中,当控制器处于活动状态时,输入参数构造函数。
<?php // file welcome.php namespace Controller; use Kecik\Controller; class Welcome extends Controller{ var $dbcon; public function __construct($dbcon) { parent::__construct(); $this->dbcon = $dbcon; } }
接下来,在路由中使用的方法如下
$app->get('/', new Controller\Welcome($dbcon), function($controller) { });
- 使用方法/函数 在控制器中使用方法/函数很简单,只需在回调部分的路线中调用它。以下是使用方法/函数编写控制器代码的方法。
<?php // file welcome.php namespace Controller; use Kecik\Controller; class Welcome extends Controller{ var $dbcon; public function __construct($dbcon) { parent::__construct(); $this->dbcon = $dbcon; } public function index() { return 'Kecik berkata: Controler->index()'; } }
接下来在路由中使用方法/函数的方法如下。
$app->get('/', new Controller\Welcome($dbcon), function($controller) { return $controller->index(); });
- 在方法/函数中带有参数 在控制器的方法/函数中给出参数时,我们可以在回调路由调用方法时给出,以下是一个具有方法/函数参数的控制器代码示例。
<?php // file welcome.php namespace Controller; use Kecik\Controller; class Welcome extends Controller{ var $dbcon; public function __construct($dbcon) { parent::__construct(); $this->dbcon = $dbcon; } public function index() { return 'Kecik berkata: Controler->index()'; } public function hello($nama) { return "Hello, $nama"; } }
在路由中使用的方法如下。
$app->get('/hello/:nama', new Controller\Welcome($dbcon), function($controller, $nama) { return $controller->index($nama); });
中间件
top 中间件是将在路由的回调执行之前/之后运行的函数。
$mw1 = function() { echo 'is Middleware 1 [Before]'; }; $mw2 = function() { echo 'is Middleware 2 [Before]'; }; $mw3 = function() { echo 'is Middleware 3 [After]'; }; $mw4 = function() { echo 'is Middleware 4 [After]'; }; $app->get('middleware', array($mw1, $mw2), function() { return 'is Response Middleware Route'; }, array($mw3, $mw4));
模型
为了使模型简单,我们只需创建一个与模型名称相同的文件,并将其保存在通过配置预先设置的目录中。以下是一个简单的模型代码。
<?php //file data.php namespace Model; use Kecik\Model; class Data extends Model { protected $table = 'data'; public function __construct($id='') { parent::__construct($id); } }
在控制器中使用模型的方法如下。
<?php // file welcome.php namespace Controller; use Kecik\Controller; class Welcome extends Controller{ var $dbcon; public function __construct($dbcon) { parent::__construct(); $this->dbcon = $dbcon; } public function index() { return 'Kecik berkata: Controler->index()'; } public function hello($nama) { return "Hello, $nama"; } public function insert() { $model = new \Model\Data(); $model->nama = $_POST['nama']; $model->email = $_POST['email']; $sql = $model->save(); } public function update($id) { $model = new \Model\Data(array('id'=>$id)); $model->nama = $_POST['nama']; $model->email = $_POST['email']; $sql = $model->save(); } public function delete($id) { $model = new \Model\Data(array('id'=>$id)); $sql = $mode->delete(); } }
视图
为了使视图简单,因为在这里您不需要创建类/对象,只需创建一个由控制器调用的普通 PHP 文件即可,以下是一个视图代码。
<!-- file welcome.php --> <?php echo 'Ini dari View' ?>
在控制器中使用视图文件的方法如下。
<?php // file welcome.php namespace Controller; use Kecik\Controller; class Welcome extends Controller{ public function __construct() { parent::__construct(); } public function welcome() { return $this->view('welcome'); } }
如何将变量发送到视图如下
<?php // file welcome.php namespace Controller; use Kecik\Controller; class Welcome extends Controller{ public function __construct() { parent::__construct(); } public function welcome($nama) { return $this->view('welcome', array('nama'=>$nama)); } }
HMVC
Kecik 框架也支持 HMVC,甚至支持更动态的 HMVC 结构。以下是一个 HMVC 结构示例。
+--app
| +-- controllers --+
| +-- models |-- MVC
| +-- views --+
| +-- module --+
| +-- controllers |-- HMVC
| +-- models |
| +-- views --+
| +-- tim1 ---------------------------------------+------------+
| +-- module1 | |
| +-- controllers --+ | |
| +-- models |-- MVC Tim1\Module1 | |
| +-- views --+ |-- Tim1 |
| +-- module2 | |
| +-- controllers --+ | |
| +-- models |-- MVC Tim1\Module2 | |
| +-- views --+---------------------+ |-- HMVC Dinamis
| +-- tim2 ---------------------------------------+ |
| +-- module1 | |
| +-- controllers --+ | |
| +-- models |-- MVC Tim2\Module1 | |
| +-- views --+ |-- Tim2 |
| +-- module2 | |
| +-- controllers --+ | |
| +-- models |-- MVC Tim2\Module2 | |
| +-- views --+---------------------+------------+
HMVC中的控制器 在HMVC中,控制器命名空间的结构必须与MVC的目录结构相同。
<?php namespace Module\Controller; use Kecik\Controller; class Welcome extends Controller { public function __construct() { parent::__contruct(); } public function index() { return $this->view('index'); } }
或者对于动态HMVC
<?php namespace Tim1\Module\Controller; use Kecik\Controller; class Welcome extends Controller { public function __construct() { parent::__contruct(); } public function index() { return $this->view('index'); } }
如何使用HMVC控制器进行路由
$app->get('welcome', function() { $ctrl = new \Module\Controller\Welcome(); return $ctrl->index(); });
而对于动态HMVC
$app->get('welcome', function() { $ctrl = new \Tim1\Module1\Controller\Welcome(); return $ctrl->index(); });
HMVC中的模型 与控制器一样,命名空间必须与MVC的目录结构相同。
<?php //file data.php namespace Module\Model; use Kecik\Model; class Data extends Model { protected static $table = 'data'; public function __construct($id='') { parent::__construct($id); } }
或者对于动态HMVC
<?php //file data.php namespace Tim1\Module\Model; use Kecik\Model; class Data extends Model { protected static $table = 'data'; public function __construct($id='') { parent::__construct($id); } }
在控制器中调用模型的方式是
<?php namespace Module\Controller; use Kecik\Controller; class Welcome extends Controller { public function __construct() { parent::__contruct(); } public function create() { $data = new \Module\Model\Data(); $data->name = $this->request->post('name'); $data->address = $this->request->post('address'); $data->email = $this->request->post('email'); $data->save(); } }
或者对于动态HMVC
<?php namespace Tim1\Module\Controller; use Kecik\Controller; class Welcome extends Controller { public function __construct() { parent::__contruct(); } public function create() { $data = new \Tim1\Module\Model\Data(); $data->name = $this->request->post('name'); $data->address = $this->request->post('address'); $data->email = $this->request->post('email'); $data->save(); } }
我们也可以使用其他模块的模型,或者位于模块目录外的主模型
HMVC中的视图 使用每个模块的文件与MVC的方式相同,我们只需要调用视图文件名,无需包含.php扩展名
<?php namespace Module\Controller; use Kecik\Controller; class Welcome extends Controller { public function __construct() { parent::__construct(); } public function wellcome($nama) { // menggunakan view dari module lain return $this->view('wellcome', array('nama'=>$nama)); } }
而如果我们想使用其他模块的视图或位于模块目录外的主视图,我们只需要将第一个参数改为数组,其中第一个值是视图名称,如果想要使用位于模块目录外的主视图,则第一个值是视图名称;如果是其他模块,则第一个值是模块名称,第二个值是要使用的模块视图名称。
$this->view(array('nama_view')); // Menggunakan view utama $this->view(array('nama_module', 'nama_view')); // Menggunakan view dari module lain
<?php namespace Module\Controller; use Kecik\Controller; class Welcome extends Controller { public function __construct() { parent::__construct(); } public function wellcome($nama) { // menggunakan view dari module lain return $this->view(array('Module2', 'welcome'), array('nama'=>$nama)); } }
或者
<?php namespace Module\Controller; use Kecik\Controller; class Welcome extends Controller { public function __construct() { parent::__construct(); } public function wellcome($nama) { // menggunakan view utama yang berada diluar module return $this->view(array('welcome'), array('nama'=>$nama)); } }
URL
URL对于帮助任务非常重要,可以获取协议、基本路径、基本URL的值,也可以进行重定向或链接到其他路由。
####protocol() 获取协议值
echo $this->url->protocol();
####basePath() 获取基本路径值
echo $this->url->basePath();
####baseUrl() 获取基本URL值
echo $this->url->baseUrl();
####redirect($route) 重定向到其他路由
$this->url->redirect('login');
####to($route) 输出带有路由的URL
<a href="<?php $this->to('home') ?>">HOME</a>
####linkTo($route) 获取带有路由值的URL
<a href="<?php echo $this->linkTo('home') ?>">Home</a>
模板
在这个框架中创建模板也很简单,你只需在配置中设置目录后创建模板文件。以下是模板代码的简单示例
<!-- file template.php --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Simple Template</title> <meta name="description" content="overview & stats" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> @css </head> <body> <div class="container"> @response </div> @js </body> </html>
签名
{{
和}}
只需将标签<?php
和>
替换为echo,你可以使用{{=
它与<?php echo
相同,如果你想要使用AngularJS的签名,可以在其后面添加反斜杠\
,例如\{{
或\}}
,这是一个简单的模板引擎,但你可以使用PHP标签。使用
@response
或@yield
将控制器输出放入其中。使用
@css
或@js
应用模板渲染资源
在路由上使用模板的方法如下。
<?php $app->get('welcome/:nama', new Controller\Welcome(), function ($controller, $nama) { return $controller->welcome($nama); })->template('template');
替换模板
<?php $app->get('admin', function() { if (!isset($_SESSION['login'])) { //** Replace Template $this->template('login', TRUE); } else { $controller = new Controller\Admin($this); return $controller->index(); } })->template('template');