ISOPHP社区网站正在建设中,欢迎提交PR,共同建设社区。
# Install PHP,Nodejs,Nginx,Mysql
# Install composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
git clone https://github.com/isophp/isophp.git
cd isophp && composer install
cd isophp/ManagerPlatform && npm install
npm start
# optional
echo '127.0.0.1 devel.isophp.cn' |sudo tee -a /etc/hosts
- PHP v7.2 or later
- Mysql v5.7 or later
- Nodejs v8.9.4 or later
- Nginx v1.13.8 or later
- Redis v4.0.6 or later
isophp/
├── Apps
├── Article
├── ArticleInfo.php ----------------------- Apps/Bar/Foo.php 封装models接口,向外提供增删查改接口
├── Handler
│ ├── ArticleHandler.php ----------------------- Apps/Bar/Handler/FooHandler.php 后台接口
│ └── CategoryHandler.php
└── Models ----------------------- models相关
└── Content.php
isophp/Modules/
├── Article ----------------------- 独立模块
│ ├── Controllers ----------------------- Controllers
│ │ └── IndexController.php
│ ├── Module.php
│ └── Router.php ----------------------- 路由注册
├── BaseModule.php
- 所有的model都放在 Apps/分类/Models/下
- Apps/分类/*.php里对应的就是Repository概念,是对该栏目下models的封装
- 所有的处理后台的接口都放在Apps/分类/Handler/×Handler.php(下面的ant design Apps下面的每个model都和一个Handler一一对应)
- 所有网站前端页面,接口都在Modules/分类/Controller/*Controller.php
- *Hanlder.php *Controller.php里操作model都调用Repository概念的类(Apps/分类/*.php)
- 路由注册都在 Modules/分类/Router.php
- 打开页面 devel.isophp.cn
- 找到在Site模块中注册的路由'/'
- controller action对应于Site/Controlelrs/IndexController.php->indexAction()。 - 这个index渲染视图是Views/pages/index/index.volt
- 打开devel.isophp.cn/test 返回的是json,前端接口的开发可以参考这个,这个例子路由注册在Sys模块里
- 后台代码位于ManagerPlatform
- 项目结构基本参考AntDesignPro文档,只是对models目录进行了调整,所有的model都放在 ManagerPlatform/src/Apps下,和 PHP 的结构保持一致,对应的php接口在Apps/下。
- 后台接口统一走 deve.isophp.cn/adminApiGate(在Sys模块下注册),所有处理后台请求的接口都放在Apps/*/Handler/*Handler.php
- 例如后台想要调用Apps/User/Handler/UserHandler.php->listAction() 参数:
{
"module": "User",
"handler": "User",
"method": "list",
"payload": {
"page":1,
"pageSize":10
}
}
- 后台的栏目和路由注册和ant design pro保持一直还是在src/common/下面,具体参考ant design pro文档
- ant design pro中用户管理的model是src/Apps/User/User.js
- 对应的php接口都放在 用Apps/User/Handler/UserHandler.php里
TODO
脚本放在Console下面,已经封装好了一个TestTask.php想要执行它的mainAction:
cd Console
php cli.php test main 我是参数1 我是参数2
测试目录在Tests下,在项目根目录下执行测试
phpunit
Tests目录下有几个测试的例子,可以参考来做。 ps: 单元测试没有问题,接口测试unit会报错错误(Test code or tested code did not (only) close its own output buffers 这是phalcon会提前输出cookie和header),但是不影响测试,后面会去想办法兼容。
TODO
在Framework/Exceptions下面定义了几种Api异常,api接口可以使用。 例如: Modules/Sys/Controllers/IndexController.php->unauthorizedAction()中的使用
- 对异常进行了捕获,错误会输出到Logs/System-date('Y-m-d').log
- 业务开发中如果需要记录日志可以使用 Log::getLogger('日志名')->日志类型(msg)
server {
listen 80;
server_name devel.isophp.cn;
root /ISOPHP/PROJECT/PATH/public;
index index.php index.html index.htm;
charset utf-8;
access_log /NGINX/LOG/PATH/isophp.log accesslog;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index /index.php;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}