jchook/house

House PHP — 一个极简的MVC应用工具集

dev-master 2016-10-20 23:50 UTC

This package is not auto-updated.

Last update: 2024-09-18 08:42:00 UTC


README

一个超级极简的纯PHP MVC工具包。

控制器

控制器层是您应用程序的接口。使用它来定义Route、接受Request并返回Response

Hello World

我们将从app.php中的Hello World路由开始。

$app = new House\Router;
$app->get('/', function($req, $resp){
	return 'Hello World';			
});

高级路由匹配

路由器简单而强大。

  • 精确字符串匹配
  • 正则表达式
  • 简化表达式
  • 任意回调
  • 上述数组的组合

尝试这个简化表达式路由,向任意名称问候。

$app->get('/hello/:name', function($req){
	return 'Hello ' . $req->param('name');
});

您甚至可以根据条件嵌套路由。

$app->group('/user', function($app){
	$app->put(function(){
		// Create user
	})
	->get('/:id', function(){
		// Retrieve user
	})
	->post('/:id', function(){
		// Update user
	})
	->delete('/:id', function(){
		// Delete user
	});
});

您可以使用before()after()将中间件附加到路由上。

$app->before('*', function($req, $resp){
	House\Log::info('Request: ' . $req);
	$resp->code(200);
});

您还可以按路由捕获错误。

$app->error('*', function($req, $resp){
	House\Log::error($req->exception->getMessage());
	return 500;
});

注意,控制器返回值传递给$response->write()

  • 字符串写入响应体
  • 整数设置响应代码
  • 数组用于Rack风格的响应

请参阅example.php以获取Router的更多示例。

模型

模型层非常基础。没有ORM。如果需要更强大的模型层,请参阅Symfony或php-activerecord。否则,请查看以下内容

class User extends House\Model {}

// throws House\NotFound
User::find(['id' => 1]);

// returns array() 
$users = User::where(['status' => ['active', 'inactive']])->limit(5)->all();

支持的数据库

  • MySQL
  • 更多即将到来..

视图

视图层几乎可以忽略不计。它如此简单,以至于甚至不需要存在。从控制器方法返回字符串将自动调用$response->write($string)

因此,视图辅助函数是任何返回字符串的方法。我们已经捆绑了一些以供您开始,但House可以潜在地支持任何模板引擎、平面文件等。由于House不是一个框架,因此没有特殊的视图注册表或文件夹,因此您可以轻松地使用composer安装替代模板引擎,并直接使用它们。

例如,快速配置您的应用程序使用Haml

House\Haml::config([
	'cache' => sys_get_temp_dir() . '/haml',
	'views' => __DIR__ . '/views',
]);

function haml($view, $vars = array(), $config = array()) {
	return new House\Haml($view, $vars, $config);
}

然后在您的应用程序中轻松实现它

$app->get('/', function($req){
	return haml('index', $req->params());
});