gstudio / g2
这是第二代框架
This package is not auto-updated.
Last update: 2020-02-07 10:06:16 UTC
README
后端开发者始终只在 /app/ 文件夹中工作
例如,我们有一个返回数据库json数据的URL。此地址是 getListUsers() 方法的API。此时获取系统所有用户列表。
site.ru/api/test/getListUsers
将json数据返回到屏幕上
{"result":[{"id":"1","name":"Олег","surname":"Антипов","patronymic":"Алексеевич","status":"active","role":"user","avatar":null,"parent_id":null,"nickname":"oleg_antipov"},{"id":"4","name":"Второй","surname":"","patronymic":"","status":"unverified","role":"user","avatar":null,"parent_id":null,"nickname":""},{"id":"5","name":"Третий","surname":"","patronymic":"","status":"unverified","role":"user","avatar":null,"parent_id":null,"nickname":""}]}
关键字:api
/api/ - это ключевое слово для обращения к API методам системы, которые взаимодествуют с данными БД, иначе говоря CRUD методы.
一切从presenter开始!
对于每个微服务都存在一个presenter。这是一个继承自基本presenter /app/presenters/_MainPresenter.php 的普通类。其中实现了与前端的工作、输出页面、小部件、翻译等工作。
/api/test - слово test обозначает какой presenter используется, который в дальнейшем и запускает метод.
Для этого в проекте существует файл /app/presenters/TestPresenter.php
创建自己的presenter后,务必继承 _MainPresenter.php
创建一个测试presenter。其中包含getListUsers方法,该方法创建Users类的实例并调用getListUsers方法。
<?php
/*
* TestPresenter work to test
*/
class TestPresenter extends MainPresenter {
public function getListUsers(){
if($this->isSecurity()){
echo (new Users())->getListUsers();
}
}
}
?>
方法中存在会话授权键的检查。这不是必需的,因为不是所有方法都需要检查用户会话。例如,如果这是获取新闻和内容的主页,则不需要检查授权,同样也不用于授权和注册页面。而在个人资料页中,其中会显示您的数据,这时就需要检查用户是否已授权。
框架会自动检查键,并在检查访问权限时如果没有键则输出错误!
if($this->isSecurity()){
...
}
完整的带访问权限的API URL
/api/test/getListUsers - слово getListUsers обозначает название метода, который запускает TestPresenter.php.
Сам метод getListUsers осуществляет запрос к БД на получения данных о пользователях.
如果需要将GET参数传递给API URL,必须这样写:site.ru/api/test/getListUsers?var=1&var2=str
模型操作
模型存储在 /app/models/ 文件夹中。模型是一个普通类,其中定义了与数据库交互的方法。
模型要求
- 方法实现的简单性
- 被presenter调用的方法必须是public访问权限
- 方法必须以JSON格式返回所有内容(数据库中的数据和错误)
Users模型的示例。在模型中存在一个获取用户列表的JSON格式的函数。
<?php
class Users {
public function getListUsers(){
$result = _MainModel::table("users_cards")->get()->send();
_MainModel::viewJSON($result);
}
}
?>
数据库操作
框架中存在一个基本的模型 _MainModel.php,它简化了数据库查询的工作。其中实现了PDO机制。请注意,不是所有查询都可以使用基本模型执行。
在系统模型 _DB.php 中实现了数据库连接机制。不需要实现自己的连接。
更改数据库连接的配置数据
项目根目录下有一个 config.php 文件。替换文件中的连接数据。
<?php
self::$config['database'] = array(
'hostname' => 'localhost',
'username' => 'user_login',
'password' => 'password',
'dbname' => 'db'
);
self::$config['salt'] = "dlkcmdfv(4&*4mvnKDNAP)_)kdldi12cdl::L847GTe]|";
?>
1.查询
_MainModel::table("table")->get(array("id", "login"))->filter(array("id" => 1))->sort("id", "desc")->pagination(0,6)->send();
объяснение:
->get(array("field1", "field2")) - список полей, которые получаем из таблицы
->get() - получаем все поля из таблицы
->filter(array("field1" => 1, "field2" => "example")) - аналог WHERE SQL запросе, field - столбец, 1 - значение, которому должен быть равен.
Если перевести на SQL запрос
WHERE field1 = 1 AND field2 = "example"
->sort("id", "desc") - аналог ORDER BY в SQL запросе, сортировка поля id по возрастанию, DESC
->sort("id", "asc") - аналог ORDER BY в SQL запросе, сортировка поля id по убыванию, ASC
->pagination(0,6) - аналог LIMIT 0, 6 ы SQL запросе
->send() - отправка запроса и возвращение данных с запроса!
2.添加新记录
_MainModel::table("table")->add(array("login" => "example@gmail.com", "pass" => "dfvkldfmlcdkfv"))->send();
->add(array("login" => "example@gmail.com", "pass" => "dfvkldfmlcdkfv")) - заполняем поле таблицы login и pass данными
Если перевести в SQL запрос
INSERT INTO `table` (`login`, `pass`) VALUES ("example@gmail.com", "dfvkldfmlcdkfv");
->send() - отправка запроса и получение id вставленной записи!
3.编辑记录
_MainModel::table("table")->edit(array("field1" => "значение1", "field2" => "значение2"), array("id" => 1))->send()
->edit(array("field1" => "значение1", "field2" => "значение2") - заполняем поля таблицы данными, которые хотим отредактировать
->send() - отправка запроса, при редактировании нечего не возвращается.
UPDATE `table` SET `field1` = 'значение1', `field2` = 'значение2' WHERE `table`.`id` = 1;
4.删除
_MainModel::table("table")->delete(array("id" => 4))->send();
Если перевести в SQL запрос
DELETE FROM table WHERE id = 4;
->send() - отправка запроса, при редактировании нечего не возвращается.
5.自定义PDO查询
$stmt = self::$db->prepare("SELECT * FROM `x16_table` WHERE id= :id AND status = :status");
$result_query = $stmt->execute(array(":id" => _MainModel::$params_url['id'], ":status" => _MainModel::$params_url['status']));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
_MainModel::viewJSON($rows);
// где _MainModel::$params_url['id'] - это GET или POST параметр, переданный в запросе.
5. _MainModel::getQuery() 方法
获取发送到数据库的查询
SELECT id FROM x16_users WHERE login= :filter_login AND password= :filter_password
错误输出的示例
要输出错误,可以使用以下示例
_MainModel::viewJSON(["error" => "text error"]);
前端。处理页面及其内容
前端开发者始终只在 /assets/、/layouts/、/widgets/ 文件夹中工作
在此框架中实现了对Web组件的工作。更多详细信息可以在 官方文档 中找到
assets 文件夹
其中存储了项目使用的所有外部库。例如,Bootstra4、jQuery、各种API。
layouts 文件夹
其中存储了项目中的目录(子项目)。
例如,我们有一个由以下部分组成的在线商店:
- 商品网站
- 用户个人资料(订单列表、购物车等)
- 管理面板(添加商品、类别等)
在本例中,我们为subproject确定了3个主要组成部分。它们将被分配到三个目录中。
示例
- /layouts/site/
- /layouts/account/
- /layouts/admin/
接下来,网站的独立页面(如登录页面、商品和分类展示页面、订单表单页面等)也将存储在各自的文件夹中
- /layouts/site/page1/
- /layouts/site/page2/
- /layouts/site/pageN/
- ...
独立页面的文件结构如下
- index.html - 页面,
- style.css - CSS样式表,
- script.js - 使用JavaScript编写的脚本。
widgets文件夹
插件是页面上的独立组件,例如表格、菜单、登录和注册表单等。它们不是完整的页面,只是页面的一部分。这个文件夹中存储着在web应用程序中使用的各种插件的目录。
单个插件的目录包括
- index.html - 插件,
- style.css - 插件的CSS样式表,
- script.js - 使用JavaScript编写的插件脚本。