amirhb/hipersia

微型-MVC PHP 框架

dev-master 2016-03-24 16:54 UTC

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 }}">

高斯亚负责确保你发送了正确的值。你不需要添加任何代码来检查它。