kecik/kecik

Kecik 框架,微框架

1.1.0 2015-05-20 06:23 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:51:53 UTC


README

PayPal:

Bank Mandiri: 113-000-6944-858, 收款人: Dony Wahyu Isprananda

这是一个具有非常简单文件系统的框架,因此这不是一个复杂的框架,但你可以将此框架构建和开发成一个复杂的框架。此框架支持简单的 MVC,你需要自定义一些代码以获得复杂的 MVC,对于模型只需生成用于 INSERTUPDATEDELETE 的 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仅支持方法 POSTGET,如果我们想使用像 PUTDELETEOPTIONSPATCH 这样的方法,我们可以使用 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 &amp; 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');