NewX
NewX是一个简洁优雅的PHP框架,包含了MVC结构、数据库关系映射(ORM)、数据迁移(Migration)、控制台应用(Console)、服务器应用(Server)等功能。
安装说明
方式一
git一键下载
git clone https://github.com/beansir/newx.git
进入根目录
cd newx
开始安装
composer install
方式二
composer一键下载安装
composer create-project beansir/newx newx v2.0 --prefer-dist
目录结构
- app // 应用目录(可自定义)
- config // 配置目录
- component.php // 组件配置
- config.php // 配置文件
- database.php // 数据库配置
- function.php // 自定义全局函数
- controllers // 控制器目录
- HomeController.php // 默认控制器(可于应用配置中更改)
- models // 模型目录
- views // 视图目录
- home // 控制器视图目录
- index.php 视图文件
- layout.php // 视图布局文件
- home // 控制器视图目录
- public // 资源目录
- index.php // 入口文件
- config // 配置目录
- console // 控制台目录
- config
- config.php
- function.php
- Home.php
- config
- migration // 数据迁移目录
- config
- config.php
- tasks // 数据迁移任务
- config
- service // 服务目录
- config
- config.php
- function.php
- WebSocket.php
- config
- vendor // 框架目录
MVC(Model View Controller)
控制器 Controller
<?php
namespace app\controllers; // 命名空间必须与应用文件夹名以及应用配置中的应用名称保持一致
use newx\base\BaseController;
class HomeController extends BaseController // 控制器首字母大写并以Controller为后缀,继承框架底层控制器基类
{
public function actionIndex() // 方法名首字母大写并以action为前缀
{
$data = [];
// 方式一 布局视图渲染
$this->layout = 'test'; // 自定义布局文件名,默认layout,也可以目录形式命名,例如:test/test
$output = $this->view('index', $data);
// 方式二 非布局视图渲染
$output = $this->view('index', $data, false);
return $output;
}
}
模型 Model
<?php
namespace app\models;
use newx\orm\base\Model;
class UserModel extends Model // 模型首字母大写并以Model为后缀,继承框架底层模型基类
{
public $table = 'user'; // 数据表
public $db = 'default'; // 数据库配置
}
简洁优雅的数据库交互用法请参考NewX ORM文档
Request
场景一
Controller中获取请求数据
<?php
namespace app\controllers;
class HomeController extends \newx\base\BaseController
{
public function actionIndex()
{
$get_all = $this->getRequest()->get(); // $_GET
$get_name = $this->getRequest()->get('name');
$post_all = $this->getRequest()->post(); // $_POST
$post_name = $this->getRequest()->post('name');
$header = $this->getRequest()->header(); // HEADER
}
}
场景二
Model中获取请求数据
<?php
namespace app\models;
class UserModel
{
public function test()
{
$request = \newx\base\Request::getInstance();
$get_all = $request->get();
$get_name = $request->get('name');
$post_all = $request->post();
$post_name = $request->post('name');
$header = $request->header();
}
}
Response
<?php
namespace app\controllers;
class HomeController extends \newx\base\BaseController
{
public function actionIndex()
{
// JSON格式(默认)
$response = $this->getResponse()->success('success', []); // 成功响应
$response = $this->getResponse()->error('error', []); // 失败响应
// XML格式
$response = $this->getResponse(\newx\base\Response::CONTENT_TYPE_XML)->success('success', []);
return $response;
}
}
Migration数据迁移
数据库配置文件
migration/config/config.php
<?php
return [
// 初始化以default数据库配置执行,初始化前请先配置此项
'default' => [
'host' => '127.0.0.1',
'user' => 'root',
'password' => 'root',
'db' => 'chat',
'type' => 'mysqli'
]
];
初始化
migrate init
新建迁移
migrate create table_user
迁移方式1:全部迁移
migrate
迁移方式2:指定迁移个数N
migrate N
迁移方式3: 指定第N个迁移
migrate -N
Demo
migrate // 所有未执行的迁移
migrate 3 // 从最近新建迁移的前3个迁移
migrate -2 // 从最近新建迁移的第2个迁移
AES数据加密
<?php
$aes = new \newx\mcrypt\Aes(); // 默认CBC模式
$str = $aes->encrypt($str); // 加密(加密后默认base64编码,可用第二个参数更改)
$str = $aes->decrypt($str); // 解密
Server
服务配置文件
service/config/config.php
<?php
return [
'app' => [
// 服务器配置
'tcp' => [
'host' => '0.0.0.0',
'port' => 9501
],
'web-socket' => [
'host' => '0.0.0.0',
'port' => 9502
],
'http' => [
'host' => '0.0.0.0',
'port' => 9503
],
],
'database' => [
// 数据库配置,非必须配置项
'default' => [
'host' => '127.0.0.1',
'user' => 'user',
'password' => 'password',
'db' => 'db',
'type' => 'mysqli'
],
]
];
启动服务
server web-socket