amirhb / hipersia
微型-MVC PHP 框架
Requires
- filp/whoops: 2.0.0
- league/route: 1.2.3
- mustangostang/spyc: 0.5.1
- twig/twig: 1.24.0
- vlucas/spot2: 2.1.7
This package is auto-updated.
Last update: 2024-09-25 22:04:57 UTC
README
Hipersia 是一个微型-MVC PHP 框架。它被开发作为一个技术研究的旅程,使我更好地了解 MVC 网络框架。Hipersia 完全可以作为框架使用,作为一个例子,我使用它开发了一个简单的 Shoutbox 应用程序。
安装
Composer
您可以使用 Composer 安装 Hipersia 和所有必需的依赖项。
{
"require": {
"amirhb/hipersia": "dev-master"
},
...
配置
数据库
由于数据库设置,项目根目录的 config 文件夹是您项目中唯一需要硬编码的路径。项目根目录的 config 文件夹中应该有一个 config.yml 文件。您应该根据您自己的环境对其进行自定义。
dsn: mysql://username:password@localhost/databasename
name: mysql
数据映射由 Spot ORM 支持,并且您可以通过更改 dsn 和 name 属性来支持 Spot ORM 支持的其他数据库。
模型
每个模型文件都是一个继承自 \Spot\Entity 的 PHP 类。
namespace app\models;
class Message extends \Spot\Entity
{
protected static $table = 'messages';
public static function fields()
{
return [
'id' => ['type' => 'integer', 'primary' => true, 'autoincrement' => true],
'author' => ['type' => 'string', 'required' => true],
'message' => ['type' => 'text', 'required' => true],
'date_created' => ['type' => 'datetime', 'value' => new \DateTime()]
];
}
}
有关如何开发 Spot 实体的更多信息,请访问 这里。
迁移
您可以运行迁移来根据您的模型创建表。您的迁移类必须继承 Hipersia 的 MigrationController,如下例所示
namespace app\controllers;
use hipersia\framework\MigrationController as Migration;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class MigrationController extends Migration {
public function index( Request $request, Response $response) {
$this->migrate('app\models\Message');
return $response;
}
}
控制器
每个控制器都继承自 hipersia\framework\Controller,并且它使用 HttpFoundation 的 Response 和 Request 对象。
namespace app\controllers;
use hipersia\Base as base;
use hipersia\framework\Controller as Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use hipersia\framework\AssetBundle;
class DefaultController extends Controller {
public function index( Request $request, Response $response, $args) {
echo 'You have called ' . $args['uri'];
return $response;
}
}
路由
正如您在示例 Shoutbox 应用程序 中看到的,您可以定义新的路由。它基于 php league Route 包。当您的应用程序启动时,您必须调用如下类似的内容。
use Symfony\Component\HttpFoundation\Request;
$router = new League\Route\RouteCollection;
$router->addRoute('GET', '/migrate', 'app\controllers\MigrationController::index');
$router->addRoute('GET', '/welcome', 'app\controllers\DefaultController::welcome');
$router->addRoute('GET', '/', 'app\controllers\DefaultController::shoutBox');
$router->addRoute('POST', '/', 'app\controllers\DefaultController::shoutBox');
$router->addRoute('GET', '/{uri}', 'app\controllers\DefaultController::index');
$dispatcher = $router->getDispatcher();
$request = Request::createFromGlobals();
$response = $dispatcher->dispatch($request->getMethod(), $request->getPathInfo());
$response->send();
在控制器中使用模型
要访问 Spot 的映射器,您应该使用 Hipersia 框架的基础方法,如下所示
$locator = base::getDbLocator();
$mapper = $locator->mapper('app\models\Message');
有关映射器提供的数据库查询的更多信息,请访问 这里。
namespace app\controllers;
use hipersia\Base as base;
use hipersia\framework\Controller as Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use hipersia\framework\AssetBundle;
class DefaultController extends Controller {
public function shoutBox( Request $request, Response $response) {
$locator = base::getDbLocator();
$mapper = $locator->mapper('app\models\Message');
if(!empty($_POST)) {
$message = $mapper->insert([
'author' => $_POST['author'],
'message' => $_POST['message']
]);
}
$messages = $mapper->all();
AssetBundle::registerCss('bootstrap', __DIR__ . '/../views/css/bootstrap.css');
return $this->render('shoutbox', ['messages' => $messages]);
}
}
资产
Hipersia 提供了 AssetBundle 类来管理如 CSS 和 JavaScript 文件等资产。您可以使用以下语法将您的资产添加到相关的视图中使用。对于 CSS 文件
AssetBundle::registerCss($name, $source);
对于 JavaScript 文件
AssetBundle::registerJs($name, $source);
$name 是您想要使用的脚本的最终名称,$source 是文件的物理地址。
视图
对于视图,Hipersia 使用 Twig 模板引擎。默认情况下,视图文件位于项目根目录的 View 文件夹中。要渲染视图,您应该使用 Hipersia 提供的 render 方法,如下所示
return $this->render($view, $data);
$view 是不带扩展名的视图文件名,$data 是一个包含传递到视图的变量的数组。有关如何创建 twig 模板的更多信息,请访问 Twig 文档。
在视图中使用资产
要注册 CSS 和 JavaScript 文件,就像我们在本指南中之前提到的,您可以在渲染视图之前使用 AssetBundle 类。
AssetBundle::registerCss('bootstrap', __DIR__ . '/../views/css/bootstrap.css');
要生成用于使用资产的相应 HTML 标签,您应该在适当的视图模板文件中添加以下内容
<!DOCTYPE html>
<html>
<head>
<title>Shoutbox Web-App by Hipersia Micro-MVC PHP-Framework</title>
{{ assets.renderAssets|raw }}
</head>
...
CSRF 支持
Hipersia 强制对 POST 请求进行 CSRF 保护。当 POST 表单时,您必须在 twig 模板中添加以下字段
<input type="hidden" name="hipersia_csrf" value="{{ hipersia_csrf }}">
高斯亚负责确保你发送了正确的值。你不需要添加任何代码来检查它。