Skip to content

Commit 2853d02

Browse files
committed
0.9
1 parent 7603a03 commit 2853d02

20 files changed

Lines changed: 238 additions & 108 deletions

.env.example

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
MYSQL_DSN=mysql:host=localhost;port=3306;dbname=test;charset=utf8
2+
MYSQL_USERNAME=root
3+
MYSQL_PASSWORD=
4+
5+
APP_DEBUG=1

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ var/log/*
66
vendor/*
77
composer.lock
88
build/*
9+
.env

README.md

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Soli PHP Framework
22
--------------------
33

4-
Soli 是一个轻量级的 PHP 框架,参考了 [Phalcon]
4+
Soli 是一个轻量级的 PHP 框架,参考了 [Phalcon], [Laravel]
55
框架的设计,意在松耦合、可扩展、简洁易用。
66

77
## 环境需求
@@ -91,32 +91,44 @@ server
9191

9292
## 应用程序结构
9393

94-
├── app 应用程序目录
95-
│   ├── Console 命令行应用控制器目录
96-
│   │   └── Demo.php Demo命令
97-
│   ├── Controllers WEB应用控制器目录
98-
│   │   ├── Controller.php 控制器基类
99-
│   │   └── IndexController.php 默认控制器
100-
│   ├── Models 模型文件目录
94+
├── app 应用程序目录
95+
│   ├── Console 终端命令应用控制器目录
96+
│   │   ├── Command.php 终端命令应用基类
97+
│   │   └── Demo.php Demo命令
98+
│   ├── Controllers WEB应用控制器目录
99+
│   │   ├── Controller.php 控制器基类
100+
│   │   ├── IndexController.php 默认控制器
101+
│   │   └── UserController.php 和用户相关的控制器
102+
│   ├── Events 事件目录
103+
│   │   ├── AppEvents.php WEB应用事件
104+
│   │   └── UserEvents.php 用户相关的事件
105+
│   ├── Models 模型目录
106+
│   │   ├── Model.php 模型基类
107+
│   │   └── UserModel.php 用户模型
108+
│   ├── Services 服务层目录
109+
│   │   ├── Service.php 服务基类
110+
│   │   └── UserService.php 用户相关的服务
101111
│   └── bootstrap.php
102-
├── composer.json Composer配置文件
103-
├── config 配置文件目录
104-
│   ├── config.php 基础配置文件
105-
│   ├── console.php 针对命令行的容器服务配置文件
106-
│   ├── routes.php 路由配置文件
107-
│   └── services.php 容器服务配置文件
108-
├── console 命令行应用入口文件
109-
├── public 公共可被访问的文件目录
112+
├── bin
113+
│   └── console 终端命令应用入口文件
114+
├── composer.json composer配置文件
115+
├── config 配置文件目录
116+
│   ├── config.php 基础配置文件
117+
│   ├── console.php 针对终端命令应用的配置文件
118+
│   ├── routes.php 路由配置文件
119+
│   └── services.php 容器服务配置文件
120+
├── phpcs.xml
121+
├── public WEB服务公共可被访问的文件目录
110122
│   ├── css
111123
│   ├── img
112-
│   ├── index.php WEB程序入口文件
124+
│   ├── index.php WEB程序入口文件
113125
│   └── js
114-
├── var 生成的文件目录
115-
│   ├── cache 缓存文件目录
116-
│   └── log 日志文件目录
117-
└── views 视图文件目录
118-
└── index IndexController 对应的视图目录
119-
└── index.twig index 函数对应的视图文件
126+
├── var 生成的文件目录
127+
│   ├── cache 缓存文件目录
128+
│   └── log 日志文件目录
129+
└── views 视图文件目录
130+
└── index IndexController 对应的视图目录
131+
└── index.twig index 函数对应的视图文件
120132

121133
目录结构并非固定不变,可以依据实际项目需要和团队开发习惯,约定目录结构,定义和表达每个目录的含义。
122134

@@ -254,17 +266,16 @@ server
254266
return $view;
255267
});
256268

257-
另外 [Soli\Application] 默认注册了以下常用服务,供控制器和自定义组件直接使用:
269+
另外 [Soli\Web\App] 默认注册了以下常用服务,供控制器和自定义组件直接使用:
258270

259271
服务名称 | 介绍 | 默认 | 是否是共享服务
260272
-----------|------------------|----------------------|-----------------
261-
router | 路由服务 | [Soli\Router] | 是
273+
router | 路由服务 | [Soli\Web\Router] | 是
262274
dispatcher | 控制器调度服务 | [Soli\Dispatcher] | 是
263-
request | HTTP请求环境服务 | [Soli\Http\Request] | 是
264-
response | HTTP响应环境服务 | [Soli\Http\Response] | 是
265-
session | Session服务 | [Soli\Session] | 是
266-
filter | 过滤器服务 | [Soli\Filter] | 是
267-
flash | 闪存消息服务 | [Soli\Session\Flash] | 是
275+
request | HTTP请求环境服务 | [Soli\Web\Request] | 是
276+
response | HTTP响应环境服务 | [Soli\Web\Response] | 是
277+
session | Session服务 | [Soli\Web\Session] | 是
278+
flash | 闪存消息服务 | [Soli\Web\Flash] | 是
268279

269280
允许开发者自定义同名的服务覆盖以上默认的服务。
270281

@@ -274,7 +285,7 @@ Web 应用程序的入口文件默认存放在 `public/index.php`,看起来像
274285

275286
require dirname(__DIR__) . '/app/bootstrap.php';
276287

277-
$app = new \Soli\Application();
288+
$app = new \Soli\Web\App();
278289

279290
// 处理请求,输出响应内容
280291
$app->handle()->send();
@@ -394,24 +405,24 @@ Soli 模型支持的方法请移步 [soliphp/db]。
394405

395406
[Soli_lifecycle]: https://i.imgur.com/mPQMdIv.png
396407
[Phalcon]: https://phalconphp.com/
408+
[Laravel]: https://laravel.com/
397409
[composer]: https://getcomposer.org/
398410
[Twig]: http://twig.sensiolabs.org/
399411
[Smarty]: http://www.smarty.net/
400412
[PSR-4]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md
401413
[Doctrine]: http://www.doctrine-project.org/
402414
[soliphp/db]: https://github.com/soliphp/db "Soli Database"
403415
[soliphp/view]: https://github.com/soliphp/view "Soli View"
404-
[Soli\Application]: http://api.soliphp.com/Soli/Application.html "应用"
416+
[Soli\Web\App]: http://api.soliphp.com/Soli/Application.html "应用"
405417
[Application]: http://api.soliphp.com/Soli/Application.html "应用"
406418
[Soli\Dispatcher]: http://api.soliphp.com/Soli/Dispatcher.html "控制器调度器"
407419
[调度器]: http://api.soliphp.com/Soli/Dispatcher.html "控制器调度器"
408-
[Soli\Http\Request]: http://api.soliphp.com/Soli/Http/Request.html "HTTP请求环境"
420+
[Soli\Web\Request]: http://api.soliphp.com/Soli/Http/Request.html "HTTP请求环境"
409421
[请求]: http://api.soliphp.com/Soli/Http/Request.html "HTTP请求环境"
410-
[Soli\Http\Response]: http://api.soliphp.com/Soli/Http/Response.html "HTTP响应环境"
422+
[Soli\Web\Response]: http://api.soliphp.com/Soli/Http/Response.html "HTTP响应环境"
411423
[响应]: http://api.soliphp.com/Soli/Http/Response.html "HTTP响应环境"
412-
[Soli\Session]: http://api.soliphp.com/Soli/Session.html "会话"
413-
[Soli\Filter]: http://api.soliphp.com/Soli/Filter.html "过滤与清理"
414-
[Soli\Session\Flash]: http://api.soliphp.com/Soli/Session/Flash.html "闪存消息"
424+
[Soli\Web\Session]: http://api.soliphp.com/Soli/Session.html "会话"
425+
[Soli\Web\Flash]: http://api.soliphp.com/Soli/Session/Flash.html "闪存消息"
415426
[依赖注入]: https://github.com/soliphp/di
416427
[事件管理]: https://github.com/soliphp/events
417428
[闪存消息]: http://api.soliphp.com/Soli/Session/Flash.html

app/Console/Demo.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
namespace App\Console;
44

5+
/**
6+
* php bin/console demo
7+
*/
58
class Demo extends Command
69
{
7-
public function handle()
10+
public function index()
811
{
912
echo "Hello, Soli.\n";
1013
}

app/Controllers/Controller.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace App\Controllers;
44

5-
use Soli\Controller as ControllerBase;
5+
use Soli\Web\Controller as ControllerBase;
66

77
abstract class Controller extends ControllerBase
88
{

app/Controllers/UserController.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace App\Controllers;
4+
5+
use App\Services\UserService;
6+
7+
use App\Events\UserEvents;
8+
9+
class UserController extends Controller
10+
{
11+
protected $userService;
12+
13+
public function __construct(UserService $userService)
14+
{
15+
$this->userService = $userService;
16+
17+
// 添加 user 事件空间,监听 user.* 的事件
18+
$this->listen('user', new UserEvents());
19+
}
20+
21+
public function view($id)
22+
{
23+
$this->view->setVar('user', $this->userService->findById($id));
24+
}
25+
26+
public function register()
27+
{
28+
$registerData = [
29+
'username' => 'wukong',
30+
'password' => 'encrypted password',
31+
];
32+
33+
// 触发 user.register 事件
34+
$this->trigger('user.register', $registerData);
35+
36+
// do something ...
37+
38+
return 'registration success!';
39+
}
40+
}

app/Events/AppEvents.php

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
/**
3+
* @author ueaner <ueaner@gmail.com>
4+
*/
5+
namespace App\Events;
6+
7+
use Soli\Component;
8+
use Soli\Events\Event;
9+
10+
use Whoops\Run as Whoops;
11+
use Whoops\Handler\PrettyPageHandler;
12+
13+
use Throwable;
14+
15+
/**
16+
* 应用相关事件
17+
*
18+
* @property \Monolog\Logger logger
19+
*/
20+
class AppEvents extends Component
21+
{
22+
public function exception(Event $event, $app, Throwable $e)
23+
{
24+
$this->logger->debug($e);
25+
$output = APP_DEBUG ? $e : $e->getMessage();
26+
27+
if (class_exists(Whoops::class)) {
28+
$whoops = new Whoops();
29+
$handler = new PrettyPageHandler();
30+
if (extension_loaded('xdebug')) {
31+
$handler->setEditor('xdebug');
32+
}
33+
$whoops->pushHandler($handler);
34+
$whoops->allowQuit(false);
35+
$whoops->writeToOutput(false);
36+
$output = $whoops->handleException($e);
37+
}
38+
39+
// 更新响应信息
40+
$app->response->setStatusCode(
41+
$e->getCode() ?: 500,
42+
$e->getMessage()
43+
)->setContent($output);
44+
}
45+
}

app/Events/Index.php

Lines changed: 0 additions & 21 deletions
This file was deleted.

app/Events/UserEvents.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
/**
3+
* @author ueaner <ueaner@gmail.com>
4+
*/
5+
namespace App\Events;
6+
7+
use Soli\Component;
8+
use Soli\Events\Event;
9+
use App\Controllers\UserController;
10+
11+
/**
12+
* 用户相关事件
13+
*/
14+
class UserEvents extends Component
15+
{
16+
public function register(Event $event, UserController $controller)
17+
{
18+
$data = json_encode($event->getData());
19+
echo "trigger on user.register with $data <br>\n";
20+
}
21+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace App\Models;
44

5-
class User extends Model
5+
class UserModel extends Model
66
{
77
/**
88
* 当前模型访问的数据库连接服务名称

0 commit comments

Comments
 (0)